最近、アプリケーションのリンクの一部が破損していることに気付きました...
破損とは、つまり、文字列が暗号化されてから復号化されると、出力が入力と同じではなく、出力が完全に混乱したものになります。
function encode($string) {
$key = 'Gt88ggjJI_987JKbgKHIfgIKhOknoUa6';
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
function decode($string) {
$key = 'Gt88ggjJI_987JKbgKHIfgIKhOknoUa6';
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
関数名で失礼します。私は (en|de)coding と (en|de)crypting の違いを知っています。残念ながら、レガシーの理由からそれを呼び出す必要があります。
$string が URI GET を介して送信されることがあります (そして、それほど機密情報は含まれていません。トピックを続けてください)。GET を介して送信される場合:
href="/path/to/thingy/?x=<?= urlencode(encode('my amazing string')); ?>"
受信側の PHP は、自動的に urldecode を実行し、次に:
$string = decode($_GET['x']);
しかし悲しいことに、約 400 分の 1 の暗号化/復号化の出力が間違っています。誰かが手を貸してくれたり、どこが間違っているのか説明できますか?
文字列が Cookie 経由で送信されると、文字列も破損することがあります。これは、関数、urlencode、またはインターネット接続が不安定なためにクライアントブラウザーがデータを正しく送信しないことに関係していますか?