我有一个文件加密站点 A 上的某些内容(我们称之为:http ://siteA.com/encrypt.php )和另一个站点上的另一个文件解密站点 A 的加密信息......第二个站点是站点B(我们称之为:http ://siteB.com/decrypt.php )。
使用 mcrypt,站点 A 对信息进行加密,将加密信息发送到站点 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;
?>
然后是第二个:
<?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 脚本的屏幕,它只是工作/不工作/几乎工作,我不知道为什么。有任何想法吗?