Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Ruby中使用HMAC SHA256_Ruby On Rails_Ruby_Sha256_Hmac - Fatal编程技术网

Ruby on rails 在Ruby中使用HMAC SHA256

Ruby on rails 在Ruby中使用HMAC SHA256,ruby-on-rails,ruby,sha256,hmac,Ruby On Rails,Ruby,Sha256,Hmac,我正在尝试应用HMAC-SHA256为RESTAPI生成密钥 我在做这样的事情: def generateTransactionHash(stringToHash) key = '123' data = 'stringToHash' digest = OpenSSL::Digest.new('sha256') hmac = OpenSSL::HMAC.digest(digest, key, data) puts hmac end 这个的输出总是这样的:(如果我把'1234

我正在尝试应用HMAC-SHA256为RESTAPI生成密钥

我在做这样的事情:

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

  hmac = OpenSSL::HMAC.digest(digest, key, data)
  puts hmac
end
这个的输出总是这样的:(如果我把'12345'作为参数或'HUSYED815X',我会得到相同的结果)


由于此原因,API无法工作。。。有人能帮我吗?

根据文档

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

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

范例

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

OpenSSL::HMAC.digest(digest, key, data)
#=> "\xF7\xBC\x83\xF40S\x84$\xB12\x98\xE6\xAAo\xB1C\xEFMY\xA1IF\x17Y\x97G\x9D\xBC-\x1A<\xD8"

OpenSSL::HMAC.hexdigest(digest, key, data)
#=> "f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8"
key='key'
数据='敏捷的棕色狐狸跳过懒惰的狗'
digest=OpenSSL::digest.new('sha256')
OpenSSL::HMAC.digest(摘要、密钥、数据)
#=>“\xF7\xBC\x83\xF40S\x84$\xB12\x98\xE6\xAAo\xB1C\xEFMY\xA1IF\x17Y\x97G\x9D\xBC-\x1A尝试以下操作:

hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, data)
在我的例子(Ticketmatic)中,我必须像上面那样创建HMAC,并在请求中添加一个包含HMAC的授权头

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) }
你可以找到一个完整的要点


根据文档
摘要:返回实例表示为二进制字符串的身份验证代码。
也许您应该使用
hexdigest
,它与
digest
具有相同的签名,但返回十六进制编码字符串(从文档中看,它看起来是相同的字符串,但人类可读)与hexdigest配合得很好!谢谢你,因为我解决了你的问题,如果你让我回答而不是自己做就好了。抱歉@MichalSzyndel,已经删除了答案。在这种情况下,要使其成为HMAC SHA256,你需要放入
digest=OpenSSL::digest.new('SHA256'))
在下面的评论中:更新了答案@cmunozgar,不知道我为什么首先把sha1放在那里
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) }