PHP加密和url问题,帮助


PHP encryption and URLs issue, help?

我做了一个基于这个模型的加密/解密方法

// encrypt:
base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key),
$string, MCRYPT_MODE_CBC, md5(md5($key))))
//decrypt:
rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key),
base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "'0");

在同一个页面内都能很好地工作,所以

decrypt(encrypt ('hello',$key))

工作良好,但是当我发送链接时:

echo "http://link.here?data=".urlencode(encrypt(('hello',$key)));

在另一个接收页I:

decrypt(urldecode($_GET['data']),$key));

我弄得一团糟。

我注意到解密后的消息发生了一些非常奇怪的事情。

我加密'72',然后读取它并解密它。当我用is_numeric()测试它时,我注意到一些非常奇怪的事情发生了……它对真假都没有反应!!发生了一些奇怪的事情....所以我用strlen测试,结果是……4 !我认为某种程度上发生了字节,但我不知道它可能是什么。我试着在邮件正文中传递一个数字,我试着让它起作用,

尝试将urldecode从您的接收页面的代码中取出。

除非你在某个地方有双重编码(并且在你发布的内容中没有任何迹象),否则你不需要(或想要)从$_GETurldecode字符串。

对于"纯文本"数据,urldecoding多次最终可能是无害的。但是,在您的特定情况下,底层文本是Base64,这很可能是有害的,因为urldecode+符号(Base64中使用的字符之一)转换为空格。