2013-04-11 67 views
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

是否安全,刚修剪过的加密算法添加填充,或者是否有必要存储数据的长度之前加密?

+0

找出你自己!尝试一堆不同的字符串长度。如果它不解密为相同的值,那么你不能这样做:) – Patashu 2013-04-11 00:52:02

+0

为什么不只是修剪,解密,看看你是否得到原始字符串。 – iWantSimpleLife 2013-04-11 00:53:29

回答

1

填充在右侧添加正常,所以考虑rtrim()

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

但是这仍然没有完全安全的,因为在PHP字符串可以包含NUL字节。如果由于某种原因平原在末尾有NUL字节,则rtrim将删除前面的NUL字节的填充

2

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

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