1

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

$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

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

4

2 回答 2

2

解密后您正在修剪该值,因此您不会遇到当前代码的任何问题。

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

于 2013-04-11T00:58:31.537 回答
1

填充通常添加在右侧,因此请考虑rtrim()

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

然而,这仍然不是完全安全的,因为在 PHP 中字符串可以包含 NUL 字节。如果由于某种原因,plain 最后确实有 NUL 字节,rtrim则将删除填充那些先前的 NUL 字节。

于 2013-04-11T00:58:06.647 回答