using System.Security.Cryptography;
public static class AWS4Authentication
public static void Main()
string dateStamp = "20191224";
var signKey = "kv4K9ApRZtfLUxQzbJMubJFDjL80FXUi9DbQdc/P";
string regionName = "ap-northeast-2";
string serviceName = "s3";
byte[] kSigning = getSignatureKey(signKey, dateStamp, regionName, serviceName);
string kSigningHex = convertHexa(getSignatureKey(signKey, dateStamp, regionName, serviceName));
string stingToSign = "AWS4-HMAC-SHA256\n20191224T004317Z\n20191224/ap-northeast-2/s3/aws4_request\n29fb7cf5ea96752eb0569e215f43602758fa2222b8ff6624bcab39b960a19fd8";
byte[] signiture = encryptHmacSHA256(stingToSign, kSigning);
string signitureHex = convertHexa(signiture);
Console.WriteLine(stingToSign);
Console.WriteLine(kSigningHex);
Console.WriteLine(signitureHex);
static byte[] encryptHmacSHA256(String data, byte[] key)
String algorithm = "HmacSHA256";
KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create(algorithm);
return kha.ComputeHash(Encoding.UTF8.GetBytes(data));
public static byte[] encryptSHA256(string input)
SHA256CryptoServiceProvider provider = new SHA256CryptoServiceProvider();
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
return provider.ComputeHash(inputBytes);
public static string convertHexa(byte[] data)
StringBuilder output = new StringBuilder();
for (int i = 0; i < data.Length; i++)
output.Append(data[i].ToString("x2").ToLower());
return output.ToString();
static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName)
byte[] kSecret = Encoding.UTF8.GetBytes(("AWS4" + key).ToCharArray());
byte[] kDate = encryptHmacSHA256(dateStamp, kSecret);
byte[] kRegion = encryptHmacSHA256(regionName, kDate);
byte[] kService = encryptHmacSHA256(serviceName, kRegion);
byte[] kSigning = encryptHmacSHA256("aws4_request", kService);