以下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)
答案 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,您可以在两种语言中获得相同的哈希值。希望有所帮助。