// Generate an authorization header. public Windows.Web.Http.Headers.HttpCredentialsHeaderValue AuthorizationHeader(string method, DateTime now, HttpRequestMessage request, long contentLength, string ifMatch = "", string md5 = "") { string MessageSignature; if (IsTableStorage) { MessageSignature = String.Format("{0}\n\n{1}\n{2}\n{3}", method, "application/atom+xml", now.ToString("R", System.Globalization.CultureInfo.InvariantCulture), GetCanonicalizedResource(request.RequestUri, StorageAccount) ); } else { MessageSignature = String.Format("{0}\n\n\n{1}\n{5}\n\n\n\n{2}\n\n\n\n{3}{4}", method, (method == "GET" || method == "HEAD") ? String.Empty : contentLength.ToString(), ifMatch, GetCanonicalizedHeaders(request), GetCanonicalizedResource(request.RequestUri, StorageAccount), md5 ); } //Debug.WriteLine(MessageSignature); var key = CryptographicBuffer.DecodeFromBase64String(StorageKey); var msg = CryptographicBuffer.ConvertStringToBinary(MessageSignature, BinaryStringEncoding.Utf8); MacAlgorithmProvider objMacProv = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256); //CryptographicKey cryptKey = objMacProv.CreateKey(key); //var buff = CryptographicEngine.Sign(cryptKey, msg); CryptographicHash hash = objMacProv.CreateHash(key); hash.Append(msg); var authorizationHeader = new Windows.Web.Http.Headers.HttpCredentialsHeaderValue("SharedKey", StorageAccount + ":" + CryptographicBuffer.EncodeToBase64String(hash.GetValueAndReset())); //Debug.WriteLine(authorizationHeader.ToString()); return authorizationHeader; }