我有一个方法,在Ruby和Objective-C中使用HMAC SHA256生成校验和,我正在尝试将其移植到C#。似乎C#实现正在创建一个太短的散列字符串:Ruby版本:
message = "POSThttp://api.somewhere.com/eventsmy_data1423778684"
key = "ABC123"
checksum = Digest::HMAC.hexdigest(message, key, Digest::SHA256)
给出'83f47bcd10c7360614bb8a858786eb588be3494f1e9bf8a1769bd5f6fff0a3b8'
虽然是C#版本
public string GetSHA256Key(string hashKey, string stringToSign)
{
MacAlgorithmProvider macAlgorithmProvider = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA256");
BinaryStringEncoding encoding = BinaryStringEncoding.Utf8;
var messageBuffer = CryptographicBuffer.ConvertStringToBinary(stringToSign, encoding);
IBuffer keyBuffer = CryptographicBuffer.ConvertStringToBinary(hashKey, encoding);
CryptographicKey hmacKey = macAlgorithmProvider.CreateKey(keyBuffer);
IBuffer signedMessage = CryptographicEngine.Sign(hmacKey, messageBuffer);
return CryptographicBuffer.EncodeToBase64String(signedMessage);
}
对于相同的密钥/消息,返回'g / R7zRDHNgYUu4qFh4brWIvjSU8em / ihdpvV9v / wo7g ='。
此网站还返回与非C#实现http://hash.online-convert.com/sha256-generator相同的散列字符串。
答案 0 :(得分:2)
您的C#代码按预期工作,但您返回HMAC的base64编码版本。
将返回行更改为
return CryptographicBuffer.EncodeToHexString(signedMessage);
它应该返回你所期望的。