在Ruby中使用HMAC SHA256

时间:2016-01-18 12:41:03

标签: ruby-on-rails ruby sha256 hmac

我正在尝试应用HMAC-SHA256来生成Rest API的密钥。

我正在做这样的事情:

def generateTransactionHash(stringToHash)
  key = '123'
  data = 'stringToHash'
  digest = OpenSSL::Digest.new('sha256')

  hmac = OpenSSL::HMAC.digest(digest, key, data)
  puts hmac
end

这个的输出总是这样:(如果我把'12345'作为参数或'HUSYED815X',我也会得到相同的结果)

ۯw/{o���p�T����:��a�h��E|q

因为这个API不起作用......有人可以帮助我吗?

3 个答案:

答案 0 :(得分:11)

根据文件OpenSSL::HMAC.digest

  

返回实例表示为二进制字符串的身份验证代码。

如果您在使用时遇到问题,可能需要OpenSSL::HMAC.hexdigest

提供的十六进制编码格式

实施例

key = 'key'
data = 'The quick brown fox jumps over the lazy dog'
digest = OpenSSL::Digest.new('sha1')

OpenSSL::HMAC.digest(digest, key, data)
#=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9"

OpenSSL::HMAC.hexdigest(digest, key, data)
#=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"

答案 1 :(得分:7)

试试这个:

hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, data)

答案 2 :(得分:0)

就我而言(Ticketmatic),我必须像上面一样创建HMAC,并向其中包含HMAC的请求添加一个Authorization标头。

hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), secret_key, access_key + name + time)
req = Net::HTTP::Get.new(uri)
req['Authorization'] = "TM-HMAC-SHA256 key=#{access_key} ts=#{time} sign=#{hmac}"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }

您可以找到完整的要旨here

还有一个博客here