PHP hash_hmac () OS farkı

0 Cevap php

Ben Amazon Ürün API isteği imzalamak gerekiyor, bunu yapmak için kabul kod şudur.

base64_encode(hash_hmac('sha256', $request, $key, true));

Ben 64bit Linux değilim ama 64bit Windows 7 olduğumda başarısız olduğunda, bu harika çalışıyor. Herkes nasıl hash_hmac 64bit Linux ve 64bit Windows arasında farklı çıktı sağlayan neden hata ayıklamak için herhangi bir fikir var mı?

Test kodu:

<?php
$test = "GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06";
#echo $test;
echo base64_encode(hash_hmac('sha256', $test, '1234567890', true));

Edit The correct output of the code above is Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg= The incorrect output is X0UTct9XSJ/3k2gu6noyKhTlksx5ZbH4qAbCyW3zX48=

Non-base64 kodlanmış değerleri 5f451372df57489ff793682eea7a322a14e592cc7965b1f8a806c2c96df35f8f hatalı ve 35a71ef94dc0cf83a137bb484aa82cd6f74b0470448a359c05e0aa2f9c4df718 hex dönüştürülür doğru bir içindir. (Bu çağrı, ham ikili çıktısı)

Edit 2 Benim tahminim şu anda ben php.net sitesinde bir 64bit sürümü bulamadı gibi Windows 7 işletim sistemi PHP ikilisini 64bit olsa bile 32bit olarak derlenmiş olmasıdır.

Edit 3 Aslında sorunun ikili 32bit olduğunu şimdi eminim. Linux üzerinde büyük olasılıkla PHP PHP pencerelerde hem 64bit işletim sistemi olsa bile 32/64bit fark neden o kendi versiyonunu uygulayan ise hash hesaplamak için bir işletim sistemi sürümünü kullanır.

0 Cevap