Ruby和PHP HMAC不同意

我正在尝试在Ruby中创建一个HMAC,然后在PHP中validation它。

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:

  

对于Ruby,我得到:20e3f261b762e8371decdf6f42a5892b530254e666508e885c708c5b0bfc03d3

对于PHP,我得到:e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

我和一些同事完全失去了,任何帮助都将不胜感激。

ruby的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" 

我注意到了

 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}"