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

问题描述:

以下python代码的等价HMAC SHA512 ruby​​代码密钥是什么?用于Python的等效HMAC SHA512 ruby​​代码密钥

的Python

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

如下我添加在红宝石的码。但不产生相同的响应,在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才能) post_data, 头) 响应= urllib2.urlopen(url_request_object)

以下是为我工作:

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

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

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可以在两种语言中获得相同的散列值。希望有所帮助。