MCRYPT_MODE_ECB
означает, что вы используете ECB, режим работы блочного шифра.Блочные шифры могут обрабатываться как для режимов работы блочных шифров, так и для режимов работы потоковых шифров.Обычные режимы блочного шифрования - это ECB и CBC, а режим общего потокового шифра - CTR, более известный как операция в режиме счетчика.
MCRYPT_RIJNDAEL_128
является реализацией AES.AES - это шифр Rijndael с размером блока 128 бит и тремя возможными размерами ключа, 128, 192 и 256 бит.Поэтому, если вы используете режим шифрования блочным шифром, то вам нужно разделить обычный текст размером 128 бит - 16 байтов - каждый.Конечно, это оставляет вас с вопросом, что делать, когда последний блок не 16 байтов.
PHP * mcrypt_encrypt
более или менее оставляет это на усмотрение пользователя.Он дополняется 00
значащими символами, если блок не заполнен до размера блока.Это хорошо, если входные данные являются строкой;Вы можете просто trim
удалить символы 00
из возвращенной строки.Однако если входные данные представляют собой двоичные данные, которые заканчиваются символом 00
, то этот символ теряется (+ любой другой символ, который, конечно же, берется из начала и конца строки).Вы также можете отправить длину строки, зашифрованную вместе с открытым текстом, конечно.
Для лучшей схемы вам нужно только взглянуть на заполнение PKCS # 7.Несколько фрагментов кода для реализации заполнения могут быть найдены в разделе комментариев mcrypt_encrypt
.
mcrypt_encrypt
в настоящее время, похоже, не поддерживает потоковые режимы для AES, поэтому эта опция недоступнаесли вы хотите использовать библиотеку PHP mcrypt.