我有ruby 1.8.7代码,用sha1创建hmac
key= '123'
digest = Digest::SHA1.new
digest << 'test string'
digest << key
result = digest.hexdigest
# "c1bdfd602e1581f1ab91928e2c3fd371a1e63a5c"
Run Code Online (Sandbox Code Playgroud)
我想用node.js复制它:
key= '123';
myhmac = crypto.createHmac('sha1', key);
result = myhmac.update('test string').digest('hex');
// 'a145f4d366e9e4e96b80bc427144ba77b3c7151a'
但结果却不同.我应该在nodejs中做什么才能获得与ruby相同的结果?
您正在将Ruby代码中的简单SHA1摘要与节点代码中的HMAC(使用SHA1作为其散列函数)进行比较.虽然HMAC使用SHA1,但这些是不同的东西.
通常,您希望在简单的SHA1上使用HMAC.要在Ruby中执行此操作,您可以执行以下操作:
require 'openssl'
key = '123'
data = 'test string'
digest = OpenSSL::Digest::SHA1.new
# See how HMAC uses SHA1 here:
result = OpenSSL::HMAC.hexdigest(digest, key, data)
# => "a145f4d366e9e4e96b80bc427144ba77b3c7151a", same as your node result
Run Code Online (Sandbox Code Playgroud)
要在Node中重现Ruby结果(计算消息的SHA1 +键),你需要这样的东西:
const crypto = require('crypto');
const hash = crypto.createHash('sha1'); // Just SHA1, no HMAC
hash.update('test string');
hash.update('123'); // The Ruby code is hashing the concatenation of
// the data and key
result = hash.digest('hex');
// => 'c1bdfd602e1581f1ab91928e2c3fd371a1e63a5c', same as Ruby code
Run Code Online (Sandbox Code Playgroud)