2009-08-26 15 views
12

से सहमत नहीं हैं मैं रूबी में एक एचएमएसी बनाने की कोशिश कर रहा हूं और फिर इसे PHP में सत्यापित कर रहा हूं।रूबी और PHP एचएमएसी

रूबी:

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 
    $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

पीएचपी के लिए, मैं मिलता है: e5f6995ba1496b2fb144329b2d1b3b23c8fa3211486e57bfaec5d993a1da9d15

मैं और कुछ सहयोगियों ए पूरी तरह से नुकसान पर, किसी भी मदद की सराहना की जाएगी।

+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}" 
संबंधित मुद्दे