很抱歉,如果有人提出这个问题,但我找不到。
我有一个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
所以请帮助解决这个问题,为什么在两个密码相同的情况下返回差异。
答案 0 :(得分:3)
如果您使用PHP mcrypt,那么您必须自己执行(PKCS#7兼容)填充。
否则PHP将执行0到15个零值字节的填充。这些字节不会自动剥离。如果您确定输入是ASCII或UTF-8兼容,那么您可以使用rtrim($str, "\0")
简单地剥离最右边的零字节。
现在strcmp
的文档表明它执行:"二进制安全字符串比较"。因此,如果密码不包含零值字节,它当然会失败。