2014-07-11 141 views
1

以下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) 

回答

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可以在兩種語言中獲得相同的散列值。希望有所幫助。