5

答えを探していましたが、ここでは見つかりませんでした。この質問がすでに出されている場合は、すみません。

文字列を暗号化および復号化する単純なコードがあります。文字列は同じように見えますが、==を使用して比較すると、同じようには見えないため、ハッシュも異なります。

これが私のコードです:

$oppa = "rompish";
$opp_enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "key", $oppa, MCRYPT_MODE_ECB);
$opp_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, "key", $opp_enc, MCRYPT_MODE_ECB);

echo $oppa."<br />".$opp_dec."<br />";

if ($oppa == $opp_dec) echo "YAY"; else echo "NOPE";

ページ上:

rompish rompishNOPE

私が間違っていることを教えてください。

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

4

1 に答える 1

2

AESは、常に16バイトのブロックで暗号化します。どうやら mcrypt_encrypt、16の倍数になるまで文字列をゼロバイトでmcrypt_decryptパディングします。これを忠実に復号化しますが、パディングを削除するための情報が不足しています。oppa_dec そして、実際には9つのゼロバイトで終わっていても、表示される値は同じように見えるので、あなたは自分をだましています。代わりに、適切なパディングスキームを使用してください。–グレッグス

これらのヌル文字を削除するには、rtrim関数を使用できます。復号化された出力を実行した後、それは等しくなるはずです。

于 2013-03-12T02:17:31.677 に答える