1

我有一个文件加密站点 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 脚本的屏幕,它只是工作/不工作/几乎工作,我不知道为什么。有任何想法吗?

4

0 回答 0