2009-08-26 5 views
12

J'essaye de créer un HMAC dans Ruby, puis de le vérifier en PHP.Ruby et PHP HMACs ne sont pas d'accord

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

Pour Ruby, je reçois: 20e3f261b762e8371decdf6f42a5892b530254e666508e885c708c5b0bfc03d3

Pour PHP, je reçois: e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

I et certains collègues une En cas de perte complète, toute aide serait grandement appréciée.

+0

Je suspecte que les chaînes sont codées différemment. –

Répondre

29

OpenSSL::HMAC.hexdigest de ruby ​​attend d'abord key puis 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

Eh bien, je serai damné. Merci:) –

0

je remarquai que

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

donne un résultat différent de PHP de

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

méfiez-vous de cette mise en garde. Pour être correct, faites

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