COACS中的HMACSHA256与node.js

时间:2016-03-15 16:11:31

标签: javascript c# node.js cryptography

我在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');

有人可以帮忙吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

以这种方式试试

workssh

因为JS实现也是这样,它只是从键字符串获取字节,不需要是base64字符串,但可以是任何字符串。

编辑:

由于您无法更改C#端,您必须在nodejs端执行相同(可能是错误的)行为,即在将base64字符串用作机密之前对其进行解码。

byte[] secretKeyBytes = Encoding.UTF8.GetBytes('some_secret_key');

请注意,如果秘密不是有效的base64字符串(允许使用!),双方都将失败。

答案 1 :(得分:-4)

答案 - 在C#端,将utf8更改为ASCIIEncoding!