Ответ 1
mcrypt
фактически реализует больше режимов, чем в списке, вы можете использовать имена строк для доступа к ним:
-
cbc
- режим CBC -
cfb
- 8-битный режим CFB; -
ncfb
- режим CFB с блочным размером; -
nofb
- режим OFB (неofb
); -
ctr
- режим CTR.
Режимы отличаются деталями реализации, поэтому их пригодность зависит от ваших данных и окружающей среды.
Перетяжка
-
Режим CBC только шифрует полные блоки, поэтому
mcrypt
заполняет ваш открытый текст нулевыми байтами, если вы не реализуете свое собственное дополнение. -
Режимы CFB, OFB и CTR шифруют сообщения любой длины.
Инициализирующий вектор:
-
Режимы CBC и CFB требуют случайного IV (не используйте
MCRYPT_RAND
). -
Режим OFB требует только уникального IV (например, глобального счетчика, возможно, первичного ключа базы данных, если строки никогда не изменяются или не удаляются).
-
CTR требует, чтобы каждый блок счетчика был уникальным (а не только IV сообщения, которое является первым блоком счетчика, а остальное, сформированное путем увеличения блока счетчика на 1 для каждого блока сообщения).
Подробнее в рекомендации NIST.
Существуют различия в производительности, которые должны быть неважными в PHP, например, можно ли распараллелить шифрование или дешифрование и сколько итераций шифрования используется на каждый блок (обычно один, но 16 в 8-битном режиме CFB).
Существуют различия в malleability, которые должны быть несущественными, потому что вы примените MAC.
И могут быть различия в их безопасности, но для этого вам следует обратиться к криптографу.