1

PHP の mcrypt_encrypt 関数で文字列を暗号化しています。これは私のコードです:

$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$this->iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);

$encryptionKey = pack('H*', $key);

$stringToEncryptUTF8 = utf8_encode($stringToEncrypt);

$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $encryptionKey, $stringToEncryptUTF8, MCRYPT_MODE_CBC, $this->iv);
$ciphertext = $this->iv . $ciphertext;
$ciphertextBase64 = base64_encode($ciphertext);
$cipherTextURLEncoded = rawurlencode($ciphertextBase64);

return $cipherTextURLEncoded;

ここで、暗号化された文字列をクライアントに送信し、クライアントは後でそれを URL 経由で送り返します。次に、次を使用して復号化します。

$stringToDecrypt = base64_decode($stringToDecrypt);

$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = substr($stringToDecrypt, 0, $ivSize);

$stringToDecrypt = substr($stringToDecrypt, $ivSize);

$encryptionKey = pack('H*', $key);
$decodedText = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $encryptionKey, $stringToDecrypt, MCRYPT_MODE_CBC, $iv);

return $decodedText;

これは元の文字列ではなく、ゴミを与えています。変数 $key はどちらの場合も同じ値です。なにが問題ですか?

4

2 に答える 2

1

復号化された文字列をトリミングして、末尾の \0 文字を削除する必要がありました。今では動作します。

于 2013-07-22T08:41:12.510 に答える
0

rawurlencode ステップを逆にしないでください。

$cipherTextURLEncoded = rawurlencode($ciphertextBase64);

これを追加してみてください:

$stringToDecrypt = rawurldecode($stringToDecrypt);
于 2013-07-18T08:18:49.853 に答える