Ruby代码的HMAC SHA512等效Python实现
什么是与以下Python代码等效的HMAC SHA512密钥的Ruby代码?
Python:
import hmac
import hashlib
response = hmac.new(PRIVATE_KEY, post_data, hashlib.sha512).hexdigest()
我在Ruby中添加了如下代码。但是它的结果与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, headers) response = urllib2.urlopen(url_request_object)
以下代码对我有效:
digest = OpenSSL::Digest.new('sha512')
sign = OpenSSL::HMAC.hexdigest(digest, PRIVATE_KEY, post_data)
1 个回答
1
顺便提一下,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
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"
结果也是203bf02ea1c71df39a1a6b8ad00db836ec89113c
所以使用SHA1和ruby-hmac,你可以在这两种语言中得到相同的哈希值。希望这对你有帮助。