2009-08-26 8 views
12

Estoy tratando de crear un HMAC en Ruby y luego verificarlo en PHP.Ruby y PHP HMAC no están de acuerdo

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

Para el Ruby, me sale: 20e3f261b762e8371decdf6f42a5892b530254e666508e885c708c5b0bfc03d3

Para el PHP, me sale: e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

yo y algunos colegas un En una pérdida completa, cualquier ayuda sería muy apreciada.

+0

Sospecho que las cadenas están codificadas de manera diferente. –

Respuesta

29

ruby ​​OpenSSL::HMAC.hexdigest espera primero key y luego 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

Bueno, estaré condenado. Gracias:) –

0

Noté que

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

da resultado diferente que la de PHP

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

cuidado con esta advertencia. Para ser correcto, solo haga

hash = HMAC::SHA256(key) 
hash << "#{a}#{b}#{c}" 
Cuestiones relacionadas