我在C#和node.js中生成一个哈希字符串,但仍然得到两个不同的结果......
在C#中:
byte[] secretKeyBytes = Convert.FromBase64String('some_secret_key');
byte[] requestValuesSignature = Encoding.UTF8.GetBytes('teststring');
HMACSHA256 testHash = new HMACSHA256(secretKeyBytes);
byte[] = hashedBytes = testHash.ComputeHash(requestValuesSignature);
string hash1 = Convert.ToBAse64String(hashedBytes);
Console.WriteLine(hash1);
在Node.js中:
var hash2 = crypto.createHmac('SHA256', 'some_secret_key').update('teststring', 'utf8').digest('base64');
有人可以帮忙吗?
提前致谢!
答案 0 :(得分:0)
以这种方式试试
workssh
因为JS实现也是这样,它只是从键字符串获取字节,不需要是base64字符串,但可以是任何字符串。
编辑:
由于您无法更改C#端,您必须在nodejs端执行相同(可能是错误的)行为,即在将base64字符串用作机密之前对其进行解码。
byte[] secretKeyBytes = Encoding.UTF8.GetBytes('some_secret_key');
请注意,如果秘密不是有效的base64字符串(允许使用!),双方都将失败。
答案 1 :(得分:-4)
答案 - 在C#端,将utf8更改为ASCIIEncoding!