How to match HMACSHA256 between C# & Python
1 min readMar 15, 2017
Things are rarely simple or obvious when working across languages; especially when one is .net.
Rather than waste time here’s the code, in its long form.
Test parameters
With a key 182634d8894831d5dbce3b3185c50881
and a message or data value of some random junk
with both solutions we should receive d94ed997943420b7d5dfb9b31ae236b7b5225510d8f0314c54ad44fb5fd44a06
C#
public string HmacSHA256(string key, string data)
{
string hash;
ASCIIEncoding encoder = new ASCIIEncoding();
Byte[] code = encoder.GetBytes(key);
using (HMACSHA256 hmac = new HMACSHA256(code))
{
Byte[] hmBytes = hmac.ComputeHash(encoder.GetBytes(data));
hash = ToHexString(hmBytes);
}
return hash;
}
public static string ToHexString(byte[] array)
{
StringBuilder hex = new StringBuilder(array.Length * 2);
foreach (byte b in array)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}
Which will generate the same value for the same given inputs as:
Python 2.7/3
hmac.new(key.encode('utf-8'), data.encode('utf-8'), hashlib.sha256).hexdigest()