Ruby代码的HMAC SHA512等效Python实现

1 投票
1 回答
1264 浏览
提问于 2025-04-18 12:54

什么是与以下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,你可以在这两种语言中得到相同的哈希值。希望这对你有帮助。

撰写回答