使用GET-PHP时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�.�Ҭ�;��&

使用GET方法时Aes解密出错

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,这就是这些函数的作用。对创建链接的位置进行编码。当你把它拿回来时,什么都不用做。