当我使用GET方法时,Aes Decrypt出错了。
resetPassword.php?em=/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
这是我发送到php文件的内容,如果我打印:$_GET['em']
该页面显示此输出:/ 7tI2cvhU31O0v3Dr + YGtpgPaxKVB6InHeriyZhxyNk =
这没关系,
如果我打电话给解密功能,如:fnDecrypt($_GET['em'], $AESPassword)
我得到这个输出: H M . Ҭ ; &4o r0 V`jڔݖ
如果我调用解密函数,如:fnDecrypt("/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=", $AESPassword)
我得到了正确的输出,所以有人能告诉我问题在哪里吗?
我的用于加密和解密的AES功能:
$iv = "d7e45c64ecb7c5eebdb9af404c0c9eff";
function fnEncrypt($sValue, $sSecretKey) {
global $iv;
return rtrim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, $sValue,
MCRYPT_MODE_CBC,$iv)),
"\0\3");
}
function fnDecrypt($sValue, $sSecretKey) {
global $iv;
return rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, base64_decode($sValue),
MCRYPT_MODE_CBC, $iv),
"\0\3");
}
答案 0 :(得分:0)
我很确定你没有得到你网址中的加号,因为这是表示空格字符的网址中的特殊字符(十六进制20,十二月32)。等号也有特殊含义。
如果原始标志确实是一个加号,则解密失败,因为它是错误的代码。
您可能无法正确编码该网址。请注意,进入URL的查询字符串的每个值(包括键和值)都必须进行URL编码。请使用urlencode()
或rawurlencode()
。
另请注意,进入HTML的每个网址都必须采用HTML编码:htmlspecialchars()
。
还有两件事:我非常确定您的加密现在已经破了,因为您发布的详细信息比您应该加密的方案要多。
我确实想知道为什么在重置网址内的密码时你需要加密一些东西。