使用GET-PHP时Aes解密出错
使用GET方法时Aes解密出错使用GET-PHP时Aes解密出错,php,aes,Php,Aes,使用GET方法时Aes解密出错 resetPassword.php?em=/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk= 这是我发送到php文件的内容,如果我打印:$\u GET['em'] 该页面显示此输出:/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk= 这没关系, 如果我调用解密函数,比如:fnecrypt$\u GET['em'],$AESPassword 我得到这个输出:����H�M�.�Ҭ�;��&
resetPassword.php?em=/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
这是我发送到php文件的内容,如果我打印:$\u GET['em']
该页面显示此输出:/7tI2cvhU31O0v3Dr+YGtpgPaxKVB6InHeriyZhxyNk=
这没关系,
如果我调用解密函数,比如:fnecrypt$\u GET['em'],$AESPassword
我得到这个输出:����H�M�.�Ҭ�;��&4o�r0�V'jڔݖ�
如果我调用解密函数,比如:fnecrypt/7tI2cvhU31O0v3Dr+ygtpgaxkvb6inheriyzhxynk=,$AESPassword
我得到了正确的输出,所以谁能告诉我问题出在哪里
用于加密和解密的my 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");
}
我很确定你的URL中没有那个加号,因为这是URL中的一个特殊字符,代表空格字符hex 20,dec 32。等号也有特殊的含义 如果原始符号确实是加号,解密就会失败,因为它是错误的代码 您可能没有正确编码该URL。请注意,进入URL查询字符串的每个值(键和值)都必须是URL编码的。为此使用urlencode或rawurlencode 还要注意,进入HTML的每个URL都必须是HTML编码的:htmlspecialchars 还有两件事:我很确定你的加密现在被破坏了,因为你发布了更多关于加密方案的详细信息
我想知道为什么在URL内重置密码时需要加密某些内容。是的,你说得对,我没有得到+符号,我也用urlencode或rawurlencode得到它。。我试着这样做:str_replace,+,$_GET['em'],这是可行的,但是我还需要替换什么符号呢?不要自己实现urlencoding,这就是这些函数的作用。对创建链接的位置进行编码。当你把它拿回来时,什么都不用做。