Безопасно ли обрезать расшифрованную строку?

Я шифрую и расшифровываю строку, используя:

$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

Безопасно ли просто обрезать заполнение, добавленное алгоритмом шифрования, или необходимо сохранить длину данных перед шифрованием?


person Petah    schedule 11.04.2013    source источник
comment
Узнай себя! Попробуйте несколько строк разной длины. Если он не расшифровывается до того же значения, то вы не можете этого сделать :)   -  person Patashu    schedule 11.04.2013
comment
Почему бы просто не обрезать, расшифровать и посмотреть, вернетесь ли вы к исходной строке.   -  person iWantSimpleLife    schedule 11.04.2013


Ответы (2)


Отступы обычно добавляются справа, поэтому рассмотрим rtrim():

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

Однако это все еще не совсем безопасно, потому что в PHP строки могут содержать NUL-байты. Если по какой-то причине у равнины были NUL-байты в конце, rtrim удалит заполнение и эти предыдущие NUL-байты.

person M8R-1jmw5r    schedule 11.04.2013

Вы обрезаете значение после расшифровки, поэтому у вас не возникнет проблем с текущим кодом.

Если вы попытаетесь повторно зашифровать другие обрезанные данные, вы получите другое зашифрованное значение.

person Drew Khoury    schedule 11.04.2013