0

一方、このコードを使用して、GET によって送信された情報を復号化しています。

$key              ="key";
$ema              =$_GET['email'];
$iv               =$_GET['iv'];
$ema              =substr($ema,1,-1);
$iv               =substr($iv,1,-1);
$ema              =rawurldecode($ema);
$cipher_alg       = MCRYPT_RIJNDAEL_128;
$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $ema, MCRYPT_MODE_CBC, $iv);

echo $decrypted_string;

たとえば、これは を出力しますhello@xyz.com。ただし、この文字列を if ステートメントと比較すると:

if($decrypted_string=="hello@xyz.com")
echo "Match";
else
echo "No match";

これは奇妙な答えを出力しますNo match。なぜそれが起こっているのかわかりません。これは var_dump($decrypted_string) の結果です:

string(32) "priyam@itbhu.ac.in" 
4

2 に答える 2

1

http://php.net/manual/en/function.mcrypt-decrypt.phpmcrypt_decryptに記載されているように、モードのブロックサイズにパディングされることに注意してください

指定された暗号とモードで復号化されるデータ。データのサイズが n * ブロックサイズでない場合、データは '\0' で埋められます。

解決策の 1 つは、元のデータが末尾の whilespaces で終わらないことを保証できる場合は、復号化後にデータをトリミングすることです。選択したブロックサイズが 128 ビットであるため、データは 32 バイトの倍数 (8 ビットから 1 バイト) になることに注意してください。

于 2013-01-27T08:31:59.277 に答える
0

あなたの質問に正しく従うと、"hello@xyz.com"が と異なるため、あなたは false になります"priyam@itbhu.ac.in"。何かが読み取り可能なものに復号化された場合、入力とキーが正しいことを確信できます。そうでない場合、失敗するか、パディングを解除しない PHP の不適切に記述された暗号関数の場合は、ゴミが表示されます。

したがって、入力は期待する文字列とは異なります。

于 2013-01-27T16:58:59.500 に答える