2009-08-26 11 views
12

Próbuję utworzyć HMAC w Ruby, a następnie zweryfikować go w PHP.HMAC Ruby i PHP nie zgadzają się

Ruby:

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:

<?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); 
?> 

Dla Ruby, otrzymuję: 20e3f261b762e8371decdf6f42a5892b530254e666508e885c708c5b0bfc03d3

Dla PHP, uzyskać: e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

ja i niektórzy koledzy za ponowna całkowita utrata, jakakolwiek pomoc byłaby bardzo doceniana.

+0

Podejrzeń, że ciągi są kodowane inaczej. –

Odpowiedz

29

ruby ​​OpenSSL::HMAC.hexdigest oczekuje najpierw key, a następnie 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

Cóż, będę przeklęty. Dzięki:) –

0

zauważyłem, że

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

daje inny wynik niż PHP

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

strzeżcie tym zastrzeżeniem. Aby uzyskać poprawne, po prostu wykonaj

hash = HMAC::SHA256(key) 
hash << "#{a}#{b}#{c}" 
Powiązane problemy