2016-07-29 34 views
0

我有紅寶石1.8.7代碼與SHA1創建HMAC的Node.js和Ruby 1.8不同HMAC SHA1結果

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相同的結果?

回答

4

您正在比較您的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 

要重現節點(計算郵件+鍵的SHA1)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 
+0

TNX非常很多的幫助! – mhd