0

hmac値が異なるのはなぜですか?$aは$bと同じです。これを引き起こしているエラーの種類や、ロジックが正しいかどうかはわかりません。Hmac_hashは、文字列への入力をバイトまたは16進数に変換し、それを実行する必要があります。間違っているかどうかを教えてください。

以下のサンプルコード。

ありがとうございました。

<?php

$a = 1234567890000*1234567890000;
$b = gmp_mul("1234567890000","1234567890000");
$b = gmp_strval($b);

echo $a."<br/>".$b."<br/>";

$c = 2525;

echo ($a==$b)."<br/>";

echo hash_hmac("SHA512",$a,$c);
echo "<br/>";
echo hash_hmac("SHA512",$b,$c);

?> 

結果

1.5241578750191E+24
1524157875019052100000000
1
973967436d3562150d60769b70a9010db21f89b114b9897430663dd195115b7893b9a6bd0e141cee301d23e2229afd6d39546630cd38f6fe7842073749f9ce3d
8bd1e7c837efaf8d51ed2d40354a020ee3c9663aa6bd4425c02b21ed02343185070216d37e54478ee78332af8e6fdecd51445fcee8cb04d4e51e4cc31283f9a9
4

1 に答える 1

2

とを比較する$a$b、内部の文字列$bは整数に変換されます。値はPHPが整数として表すことができる値よりも大きいため、代わりにサイレントにfloatに変換されます。 $aフロートです。フロートは等しいため、比較は成功します。

hash_hmac文字列を整数に変換してからオーバーフローしてfloatにするのではなく、floatを$a文字列に変換します。$bこれがハッシュが異なる理由です。

比較を失敗させて、その間の動作と一貫性を保つ場合は、最初に文字列hash_hmacにキャストするか、データ型の変換を回避するために使用する必要があります。$a===

于 2012-12-14T20:04:29.537 に答える