2016-07-29 1 views
0

J'ai code Ruby 1.8.7 qui créent HMAC avec SHA1Node.js et rubis 1,8 différent résultat SHA1 HMAC

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

Je veux reproduire ce avec Node.js:

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

Mais le résultat est différent. Que dois-je faire dans nodejs pour avoir le même résultat qu'à partir de ruby?

Répondre

4

Vous comparez un code SHA1 simple dans votre code Ruby avec un HMAC (en utilisant SHA1 comme fonction de hachage) dans votre code de nœud. Ce sont des choses différentes, bien que le HMAC utilise SHA1.

Habituellement, vous voudriez utiliser le HMAC sur le SHA1 ordinaire. Pour ce faire en Ruby on pouvait faire quelque chose comme:

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 

Pour reproduire les résultats Ruby dans le nœud (calcul du SHA1 du message + clé), vous voulez quelque chose comme ceci:

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 très beaucoup pour l'aide! – mhd