web-dev-qa-db-ja.com

RubyでのHMAC SHA256の使用

Rest APIのキーを生成するためにHMAC-SHA256を適用しようとしています。

私はこのようなことをしています:

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が機能していません...誰か助けてくれますか?

15
Eduardo Pedroso

ドキュメントによると OpenSSL::HMAC.digest

インスタンスがバイナリ文字列として表す認証コードを返します。

使用に問題がある場合は、OpenSSL::HMAC.hexdigestが提供する16進数でエンコードされたフォームが必要になる可能性があります。

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"
15
Mike Szyndel

これを試して:

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

私の場合(チケットマティック)上記のように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

0
Aike de Jongste