1

我在我的登录模型中实现了用于解密/加密用户密码的功能(在加密版本中存储在 cookie 中)。一切正常,除非我重新启动浏览器并尝试通过 cookie 使用密码登录。

解析器告诉我这是错误的密码,即使当我回显它时我可以看到它是正确的密码。因此我尝试了一个“strlen”来查看密码有多少个字符,它显示为 32(!)。我唯一能想到的是(在这种情况下)添加了 28 个空格,这是无法通过回声看到的。

如果有人能告诉我发生了什么以及如何解决它,我将不胜感激?

function decrypt($encrypedText) {
    $key = "The secret key is";
    $decryptedText = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($encrypedText), MCRYPT_MODE_ECB);

    echo $decryptedText;            //  "abcd" <- what I put in
    echo strlen($decryptedText);    //  32 (?)

    return $decryptedText;
}
4

2 回答 2

3

这是因为 32 字节是 Rijndael 256 的块大小(即 32 = 256 / 8),解密后的数据被填充'\0'以匹配该长度。

要更正此问题,您可以像这样删除这些字符:

return rtrim($decryptedText, '\0');
于 2012-09-25T14:00:10.977 回答
1

删除空格使用 phptrim()函数

$password=trim($_COOKIE("value"));

它将从开头和结尾删除空格

于 2012-09-25T13:47:07.127 回答