我有一个小问题:我的解密不会给我相同的字符串我编码,我找不到问题…看了其他的帖子,但没有任何帮助下面是我的函数:
public static function encryptData($data){
if($key = self::getEncryptionKey()){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_ECB,$iv));
} else {
return false;
}
}
public static function decryptData($data)
{
if($key = self::getEncryptionKey()){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($data), MCRYPT_MODE_ECB,$iv);
} else {
return false;
}
}
问题在哪里?
要解密,您需要所有在两端完全相同。键,模式,IV和填充。
查看您的代码,您似乎正在生成一个用于解密的新IV。不喜欢。使用与加密时相同的IV。你,正确地,明确指定了一个模式,但你选择了最坏的可能模式。不要使用欧洲央行,它会泄露信息。请使用CBC或CTR模式。
你没有指定padding。要显式地指定它,使用PKCS7和Rijndael要好得多。
如果这些都没有帮助,那么逐个字节检查你的密钥,以确保加密和解密时它是相同的。