我有ruby 1.8.7代码,用sha1创建hmac
key= '123'
digest = Digest::SHA1.new
digest << 'test string'
digest << key
result = digest.hexdigest
# "c1bdfd602e1581f1ab91928e2c3fd371a1e63a5c"
我想用node.js复制它:
key= '123'; myhmac = crypto.createHmac('sha1', key); result = myhmac.update('test string').digest('hex'); // 'a145f4d366e9e4e96b80bc427144ba77b3c7151a'
但结果却不同。 我应该在nodejs中做什么才能获得与ruby相同的结果?
答案 0 :(得分:5)
您正在比较Ruby代码中的普通SHA1摘要和节点代码中的HMAC(使用SHA1作为其散列函数)。虽然HMAC使用SHA1,但这些是不同的东西。
通常你想在普通的SHA1上使用HMAC。要在Ruby中执行此操作,您可以执行以下操作:
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
要在Node中重现Ruby结果(计算消息的SHA1 +键),你需要这样的东西:
/searchProducts?q=<search-term>
答案 1 :(得分:0)
要使其同时适用于(nodejs 和 ruby),请确保:
红宝石:
payload = "{'name': 'james kachiro sarumaha', 'data': [], 'is_available': true}"
payload = payload.to_json
节点:
payload = "{'name': 'james kachiro sarumaha', 'data': [], 'is_available': true}"
payload = JSON.stringify(payload)
红宝石:
key = "v1tg3cOvfNdxh4TXxtdVmeB106doeQFS"
节点:
key = "v1tg3cOvfNdxh4TXxtdVmeB106doeQFS"
转化
红宝石:
digest = OpenSSL::Digest::SHA256.new
result = OpenSSL::HMAC.hexdigest(digest, password, payload)
#bd0724a05fab03e64e0112d09ceb11b6c1cbd8f9629a1d303e8d395d36cce396
节点:
crypto.createHmac('sha256', key).update(payload).digest('hex')
//bd0724a05fab03e64e0112d09ceb11b6c1cbd8f9629a1d303e8d395d36cce396
来自加密模块的加密(nodejs 核心)。
就我而言,我使用的是 SHA256,但您可以将其更改为 SHA1。它也会有相同的结果。
发送