サイト A で何かを暗号化するファイル ( http://siteA.com/encrypt.phpと呼びましょう) と、サイト A からの暗号化された情報を復号化する別のサイトの別のファイルがあります...その 2 番目のサイトはサイトですB (それを呼びましょう: http://siteB.com/decrypt.php ).
サイト A は mcrypt を使用して情報を暗号化し、暗号化された情報をサイト B に送信し (Base64 エンコーディングでエンコードした後に使用される IV と共に)、サイト B はそれを復号化し、サイト A は復号化の結果を取得して画面に表示します。 . 復号化の結果をエコーするだけでなく、mcrypt で使用される「iv」変数もエコーします。
ここでは両方のファイルの内容を提供しますが、まず問題について説明します。
そこに座ってサイト A の暗号化ページを更新すると (サイト B が復号化した後に復号化結果がエコーされます)、完全にランダムに 3 種類の結果が得られます。
場合によっては完全に機能し、正しい IV と正しい復号化されたテキストが画面に表示されます。
また、完全に間違った IV が画面に表示され、復号化されたテキストがまだ暗号化されている場合もあります。
その後、次のエラー メッセージが表示されることもあります。IV パラメータはブロックサイズと同じ長さでなければなりません。
これは完全にランダムです...韻や理由はありません。各ファイルのソースコードは次のとおりです。
//Site A - http://SiteA.com/encrypt.php
<?php
$iv_size = "32";
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$secretkey = hash ("md5", "0yFzFSlTEb7vla5Kv3BHvKcBzX4tJBId5UKAaDDr");
$text = "something";
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secretkey, $text, MCRYPT_MODE_CBC, $iv));
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secretkey, base64_decode($encrypted), MCRYPT_MODE_CBC, $iv);
$base64iv = base64_encode($iv);
$result = file_get_contents("http://SiteB.com/decrypt.php?urliv=$base64iv&something=$encrypted");
echo $result;
?>
次に2番目:
<?php
//Site B - http://SiteB.com/decrypt.php
$iv_size = "32";
$base64iv = $_GET['urliv'];
$something = $_GET['something'];
$iv = base64_decode($base64iv);
$secretkey = hash ("md5", "0yFzFSlTEb7vla5Kv3BHvKcBzX4tJBId5UKAaDDr");
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $secretkey, base64_decode($something), MCRYPT_MODE_CBC, $iv);
echo "Decrypted Text " . $decrypttext;
echo "<br><br>";
echo "IV Variable After Base64_Decode " . $iv;
?>
私は文字通りそこに座ってサイト A スクリプトの画面を更新することができますが、機能する/機能しない/ほとんど機能するだけで、その理由がわかりません。何か案は?