用于Python的ruby代码的等效HMAC SHA512密钥

时间:2014-07-11 06:56:35

标签: python ruby-on-rails hmac hmacsha1

以下python代码的ruby代码的等效HMAC SHA512键是什么?

的Python

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

我在ruby中添加了如下代码。但是不会产生与python相同的响应

红宝石

 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),                                          发布数据,                                          头) response = urllib2.urlopen(url_request_object)

以下内容对我有用:

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

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

1 个答案:

答案 0 :(得分:1)

不应该使用FYI digest / hmac。来自Ruby文档

  

注意:不鼓励使用此库,因为这个实现意味着是实验性的,但不知何故进入1.9系列而没有被注意到。

文档建议使用openssl,但我有更好的运气与ruby-hmac。还有,SHA512绝对需要你吗?这是一个使用SHA1的解决方案。

<强>的Python

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

给出203bf02ea1c71df39a1a6b8ad00db836ec89113c

<强>红宝石

require 'rubygems'
require 'hmac-sha1'

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

给出203bf02ea1c71df39a1a6b8ad00db836ec89113c

因此,使用SHA1和ruby-hmac,您可以在两种语言中获得相同的哈希值。希望有所帮助。