using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text.RegularExpressions;
public static void Main() {
var keyString = "5g8LU3oILgIW209VDpgmSuqSnJo=";
var urlString = "https://maps.googleapis.com/maps/api/geocode/json?address=New+York&client=gme-bureaurs";
var signedUrl = Sign(urlString, keyString);
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
WebRequest request = WebRequest.Create(signedUrl);
WebResponse response = request.GetResponse();
String responseString = null;
using (Stream stream = response.GetResponseStream())
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
responseString = reader.ReadToEnd();
Console.Write(responseString);
private static string Sign(string url, string keyString) {
ASCIIEncoding encoding = new ASCIIEncoding();
string usablePrivateKey = keyString.Replace("-", "+").Replace("_", "/");
byte[] privateKeyBytes = Convert.FromBase64String(usablePrivateKey);
byte[] encodedPathAndQueryBytes = encoding.GetBytes(uri.LocalPath + uri.Query);
HMACSHA1 algorithm = new HMACSHA1(privateKeyBytes);
byte[] hash = algorithm.ComputeHash(encodedPathAndQueryBytes);
string signature = Convert.ToBase64String(hash).Replace("+", "-").Replace("/", "_");
return uri.Scheme+"://"+uri.Host+uri.LocalPath + uri.Query +"&signature=" + signature;