2013-04-11 19 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

解密後,您正在修改該值,因此您不會遇到當前代碼的問題。

如果您嘗試重新加密不同的修剪數據,您將獲得不同的加密值。