PHP mcrypt_encrypt / mcrypt_decrypt问题,返回不同的值

时间:2013-03-10 00:02:05

标签: php encryption hash

我正在寻找答案,但在这里找不到。如果已经提出这个问题,请原谅。

我有一个简单的代码加密和解密字符串,字符串看起来一样,但是当使用==比较它们时它们看起来不一样,所以哈希也不同......

这是我的代码:

$oppa = "rompish";
$opp_enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, "key", $oppa, MCRYPT_MODE_ECB);
$opp_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, "key", $opp_enc, MCRYPT_MODE_ECB);

echo $oppa."<br />".$opp_dec."<br />";

if ($oppa == $opp_dec) echo "YAY"; else echo "NOPE";

在页面上:

rompish rompish NOPE

请告诉我我做错了什么。

谢谢!

1 个答案:

答案 0 :(得分:2)

  

AES总是以16字节的块加密事物。显然地   mcrypt_encrypt用零字节填充字符串,直到它为a   16. mcrypt_decrypt的多个尽职地解密这个但缺乏   删除填充的信息。而你在欺骗自己   因为即使oppa_dec显示的值看起来也一样   实际上以9个零字节结束。使用合理的填充方案   代替。 - GregS

要删除这些空字符,可以使用rtrim功能。通过它运行解密输出后它应该是相等的。