2014-07-11 1 views
1

Quelle est la clé équivalente HMAC SHA512 du code ruby ​​pour le code python suivant?Clé HMAC SHA512 équivalente du code ruby ​​pour Python

Python:

import hmac 
import hashlib 
response = hmac.new(PRIVATE_KEY, post_data, hashlib.sha512).hexdigest() 

J'ai ajouté un code en ruby ​​comme suit. Mais ne donne pas la même réponse que dans python

Ruby:

require 'digest/hmac' 
response = Digest::HMAC.hexdigest(post_data, PRIVATE_KEY ,Digest::SHA512) 

url_request_object = urllib2.Request ("% s /% s" % (BASE_API_URL, url_suffix), post_data, têtes) réponse = urllib2.urlopen (url_request_object)

Ce qui suit travaille pour moi:

digest = OpenSSL::Digest.new('sha512') 

    sign = OpenSSL::HMAC.hexdigest(digest, PRIVATE_KEY, post_data) 

Répondre

1

FYI digest/hmac ne doit pas être utilisé. À partir des documents Ruby

ATTENTION: L'utilisation de cette bibliothèque est déconseillée, car cette implémentation était censée être expérimentale mais a été intégrée dans la série 1.9 sans être remarquée.

Les docs suggèrent d'utiliser openssl, mais j'avais plus de chance avec ruby-hmac. Aussi, SHA512 est-il absolument nécessaire pour vous? Voici une solution qui fonctionne avec SHA1.

Python:

import hmac 
import hashlib 
response = hmac.new("PRIVATE_KEY", "Stack OverFlow Funtime", hashlib.sha1).hexdigest() 

donne 203bf02ea1c71df39a1a6b8ad00db836ec89113c

Ruby:

require 'rubygems' 
require 'hmac-sha1' 

key = 'PRIVATE_KEY' 
signature = "Stack OverFlow Funtime" 
hmac = HMAC::SHA1.new(key) 
hmac.update(signature) 
puts "#{hmac.hexdigest}\n" 

donne 203bf02ea1c71df39a1a6b8ad00db836ec89113c

Donc, en utilisant SHA1 et ruby-hmac vous pouvez obtenir le même hachage dans les deux langues. J'espère que cela pourra aider.

Questions connexes