使用GET时,Aes Decrypt出错 - PHP

时间:2015-02-14 23:31:45

标签: php aes

当我使用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");
  }

1 个答案:

答案 0 :(得分:0)

我很确定你没有得到你网址中的加号,因为这是表示空格字符的网址中的特殊字符(十六进制20,十二月32)。等号也有特殊含义。

如果原始标志确实是一个加号,则解密失败,因为它是错误的代码。

您可能无法正确编码该网址。请注意,进入URL的查询字符串的每个值(包括键和值)都必须进行URL编码。请使用urlencode()rawurlencode()

另请注意,进入HTML的每个网址都必须采用HTML编码:htmlspecialchars()

还有两件事:我非常确定您的加密现在已经破了,因为您发布的详细信息比您应该加密的方案要多。

我确实想知道为什么在重置网址内的密码时你需要加密一些东西。