2009-08-26 4 views
12

RubyでHMACを作成し、それをPHPで検証しようとしています。RubyとPHP HMACが合意していません

ルビー:

require 'openssl' 
message = "A522EBF2-5083-484D-99D9-AA97CE49FC6C,1234567890,/api/comic/aWh62,GET" 
key  = "3D2143BD-6F86-449F-992C-65ADC97B968B" 
hash = OpenSSL::HMAC.hexdigest('sha256', message, key) 
p hash 

PHP:Ruby用

<?php 
    $message = "A522EBF2-5083-484D-99D9-AA97CE49FC6C,1234567890,/api/comic/aWh62,GET"; 
    $key  = "3D2143BD-6F86-449F-992C-65ADC97B968B"; 
    $hash = hash_hmac("sha256", $message, $key); 
    var_dump($hash); 
?> 

、私が取得:20e3f261b762e8371decdf6f42a5892b530254e666508e885c708c5b0bfc03d3 PHP用

、私が手:e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

Iおよびいくつかの同僚a完全な損失で、どんな助けも大いに評価されるでしょう。

+0

私は、文字列が異なって符号化されていると思う。 –

答えて

29

ルビーのOpenSSL::HMAC.hexdigestは、最初にkey、次にmessageが必要です。

irb(main):002:0> OpenSSL::HMAC.hexdigest('sha256','3D2143BD-6F86-449F-992C-65ADC97B968B','A522EBF2-5083-484D-99D9-AA97CE49FC6C,1234567890,/api/comic/aWh62,GET') 
=> "e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15" 
+2

まあ、私は気になるでしょう。ありがとう:) –

0

私は

hash = HMAC::SHA256(key) 
hash << a 
hash << b 
hash << c 

は、PHPの

hash_hmac('sha256',$a.$b.$c, $key) 

は、この警告の用心とは異なる結果をもたらすことに気づきました。正しいことを得るには、ちょうだい

hash = HMAC::SHA256(key) 
hash << "#{a}#{b}#{c}" 
関連する問題