在 Ruby 中使用 HMAC SHA256
Using HMAC SHA256 in Ruby
我正在尝试应用 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 因此无法正常工作...有人可以帮我解决这个问题吗?
Returns the authentication code an instance represents as a binary string.
如果您在使用时遇到问题,您可能需要 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"
试试这个:
hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, data)
在我的例子 (Ticketmatic) 中,我必须像上面那样创建 HMAC,并向其中包含 HMAC 的请求添加授权 header。
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
我正在尝试应用 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 因此无法正常工作...有人可以帮我解决这个问题吗?
Returns the authentication code an instance represents as a binary string.
如果您在使用时遇到问题,您可能需要 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"
试试这个:
hmac = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, data)
在我的例子 (Ticketmatic) 中,我必须像上面那样创建 HMAC,并向其中包含 HMAC 的请求添加授权 header。
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