using System.Security.Cryptography;
public static void Main()
Console.WriteLine("Should match: 5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7");
var payload = "AWS4-HMAC-SHA256\n20150830T123600Z\n20150830/us-east-1/iam/aws4_request\nf536975d06c0309214f805bb90ccff089219ecd68b2577efef23edd43b7e1a59";
var key = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY";
var dateStamp = "20150830";
var regionName = "us-east-1";
var signingKey = GetSignatureKey(key, dateStamp, regionName, service);
var hexSigningKey = HexEncode(signingKey);
var signed = HmacSHA256(payload, signingKey);
var hexSigned = HexEncode(signed);
Console.WriteLine("Calculated: " + hexSigned.ToString());
private static string HexEncode(byte[] data, bool lowercase = true)
var sb = new StringBuilder();
for (var i = 0; i < data.Length; i++)
sb.Append(data[i].ToString(lowercase ? "x2" : "X2"));
static byte[] HmacSHA256(String data, byte[] key)
String algorithm = "HmacSHA256";
KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create(algorithm);
return kha.ComputeHash(Encoding.UTF8.GetBytes(data));
static byte[] GetSignatureKey(String key, String dateStamp, String regionName, String serviceName)
byte[] kSecret = Encoding.UTF8.GetBytes(("AWS4" + key).ToCharArray());
byte[] kDate = HmacSHA256(dateStamp, kSecret);
byte[] kRegion = HmacSHA256(regionName, kDate);
byte[] kService = HmacSHA256(serviceName, kRegion);
byte[] kSigning = HmacSHA256("aws4_request", kService);