AES解密密码与普通密码不匹配

时间:2015-12-27 19:19:30

标签: php encryption cryptography

很抱歉,如果有人提出这个问题,但我找不到。

我有一个AES 128加密密码,

 0oebFpht20TMB20alRs4IMMMgIeMObvYsD1/8rUtyq8= 

我做了解密,

$decrypt_password = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);

echo $decrypt_password;
output:   Red@(Eye4u)

我收到正确的普通密码,但当我尝试将解密密码与另一个普通密码进行比较时,它不匹配。

$another_pass = "Red@(Eye4u)";

if($another_pass == $decrypt_password) {
      //Not going there
}
else if(strcmp($another_pass, $decrypt_password) == 0) {
      //Not going there
}

else if(strcmp($another_pass, $decrypt_password)){
      //Performing this
}

我试图检查返回值,

echo strcmp($another_pass, $decrypt_password);
output: -5

echo strcmp($decrypt_password, $another_pass);
output: 5

所以请帮助解决这个问题,为什么在两个密码相同的情况下返回差异。

1 个答案:

答案 0 :(得分:3)

如果您使用PHP mcrypt,那么您必须自己执行(PKCS#7兼容)填充。

否则PHP将执行0到15个零值字节的填充。这些字节不会自动剥离。如果您确定输入是ASCII或UTF-8兼容,那么您可以使用rtrim($str, "\0")简单地剥离最右边的零字节。

现在strcmp的文档表明它执行:"二进制安全字符串比较"。因此,如果密码不包含零值字节,它当然会失败。