使用 GET 时 Aes Decrypt 出错 - PHP

Aes Decrypt goes wrong when using GET - PHP

当我使用 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)),
               "[=12=]");
  }

  function fnDecrypt($sValue, $sSecretKey) {
    global $iv;
    return rtrim(
        mcrypt_decrypt(
           MCRYPT_RIJNDAEL_256,
           $sSecretKey, base64_decode($sValue),
           MCRYPT_MODE_CBC, $iv),
           "[=12=]");
  }

我很确定你没有得到 URL 中的加号,因为它是 URL 中代表 space 字符的特殊字符(十六进制 20,12 月 32 日)。等号也有特殊的含义。

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

您可能没有正确编码 URL。请注意,每个进入 URL 查询字符串的值,包括键和值,都必须经过 URL 编码。为此使用 urlencode()rawurlencode()

另请注意,进入 HTML 的每个 URL 都必须进行 HTML 编码:htmlspecialchars().

还有两件事:我很确定你的加密现在已经被破解了,因为你发布了比你应该发布的更多关于你的加密方案的细节。

而且我确实想知道为什么在 URL 中重置密码时需要加密某些内容。