2016-07-29 15 views
0

I Rubin 1.8.7 Code, der hmac mit SHA1node.js und Rubin 1.8 verschiedene HMAC SHA1-Ergebnis

key= '123' 
digest = Digest::SHA1.new 
digest << 'test string' 
digest << key 
result = digest.hexdigest 
# "c1bdfd602e1581f1ab91928e2c3fd371a1e63a5c" 

Ich möchte replizieren diese mit node.js erstellen:

 
key= '123'; 
myhmac = crypto.createHmac('sha1', key); 
result = myhmac.update('test string').digest('hex'); 
// 'a145f4d366e9e4e96b80bc427144ba77b3c7151a' 

Aber Das Ergebnis ist anders. Was soll ich in Nodejs tun, um das gleiche Ergebnis wie von Ruby zu haben?

Antwort

4

Sie vergleichen einen einfachen Digest SHA1 in Ihrem Ruby-Code mit einem HMAC (mit SHA1 als Hash-Funktion) in Ihrem Node-Code. Dies sind verschiedene Dinge, obwohl der HMAC SHA1 verwendet.

Normalerweise möchten Sie den HMAC über die Ebene SHA1 verwenden. Um das zu tun in Ruby Sie so etwas wie tun könnte:

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 

Um die Ruby-Ergebnisse in Knoten (Berechnung der SHA1 der Nachricht + key) zu reproduzieren, wollen Sie etwas wie folgt aus:

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 sehr viel für die Hilfe! – mhd