%3D%3D で終わる値を解読できません。復号化すると、完全に判読できない戻り値が返されます。暗号化された値はクエリ文字列を介して渡されますが、URL エンコーディングの問題を除外するために、0 から 200 までの値をループするテストを実行しました。
暗号化および復号化機能:
function encryptValue($encrypt) {
$key = variable_get_local("privateKey", $default = "");
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, trim($encrypt), MCRYPT_MODE_ECB, $iv));
$encode = urlencode(base64_encode($passcrypt));
return $encode;
}
function decryptValue($decrypt) {
$key = variable_get_local("privateKey", $default = "");
$decoded = base64_decode(urldecode($decrypt));
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, trim($decoded), MCRYPT_MODE_ECB, $iv));
return $decrypted;
}
暗号化と復号化の間で iv 値を同一に保とうとしましたが、これは出力を変更しません。trim()
また、周りを削除しようとしましたtrim($decoded)
が、それも何も変わりませんでした。
以下は、問題を特定するために使用したものです。0 から 200 の間で、暗号化は %3D%3D で終わる値を 9 回生成し、復号化に失敗します。
for($i=0;$i<200;$i++) {
echo encryptValue($i) . "<br/>";
echo decryptValue(encryptValue($i)) . "<br/><hr/>";
}
読んでくれてありがとう。