我有一个文件加密网站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参数必须与blocksize一样长
这完全是随机的...没有押韵或理由。以下是每个文件的源代码:
//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脚本的屏幕,它只是工作/不工作/几乎工作,我不知道为什么。有什么想法吗?