修剪解密的字符串是否安全?

时间:2013-04-11 00:46:39

标签: php encryption aes rijndael cbc-mode

我使用以下方法加密和解密字符串:

$key = 'my key';
$data = 'my string';
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
$data = trim($decrypted, chr(0));

http://codepad.viper-7.com/1JgCRs

只是修剪加密算法添加的填充是否安全,或者在加密之前是否需要存储数据的长度?

2 个答案:

答案 0 :(得分:2)

您在解密后正在修剪该值,这样您就不会遇到当前代码的问题。

如果您尝试重新加密不同的裁剪数据,您将获得不同的加密值。

答案 1 :(得分:1)

正常情况下会在右侧添加填充,因此请考虑rtrim()

$data = rtrim($decrypted, chr(0));

然而,这仍然不是很安全,因为在PHP中,字符串可以包含NUL字节。如果由于某种原因,普通话确实在末尾有NUL字节,rtrim将删除填充那些以前的NUL字节。