Как я могу зашифровать / расшифровать данные, используя режим AES CBC+CTS (шифрование текста) в PHP?
Я должен зашифровать и расшифровать данные в режиме AES CTS (кража зашифрованного текста, иногда называемая AES-XTS) в PHP для взаимодействия с удаленной системой, написанной на платформе.NET. В.NET 4 этот режим поддерживается изначально.
Для PHP я не могу найти решение, основанное на руководстве, mcrypt, похоже, не поддерживает этот режим.
Может кто-нибудь объяснить, пожалуйста, разницу между простым CBC и CBC-CTS? Можно ли заставить последний работать в PHP с использованием существующих модулей / библиотек?
2 ответа
Это шаги из статьи Википедии, вставленные в мои комментарии, объясняющие
LDn = расшифровать (K, Cn−1). Дешифруйте второй-последний блок зашифрованного текста (второй-последний блок фрагмента 128-бит /16-байтовый), используя нули в качестве IV.
Вы можете сделать это с помощью стандартной функции PHP mcrypt, просто передав
$ Second_to_last_cipher=array_slice($your_cipher_text_byte_array, граф ($your_cipher_text_byte_array)-32,16)
mcrypt_decrypt с нулевым Iv
$ second_to_last_clear = mcrypt_decrypt "MCRYPT_RIJNDAEL_128", ключ $, $ second_to_last_ciphe)
Cn = Cn || Хвост (Дн, Б-М). Дополните зашифрованный текст до ближайшего кратного размера блока, используя последние B-M биты дешифрования блочного шифра второго за последним блока зашифрованного текста.
Скопируйте последние n байтов значения, которое вы только что расшифровали, в последний блок зашифрованного текста.
$ n = 16 - ($ second_to_last_clear% 16)
Затем используйте копию массива для копирования данных
Поменяйте местами последние два блока шифротекста.
Просто поменяйте местами содержимое последней и второй двух последних ячеек в вашем массиве зашифрованного текста
Расшифруйте зашифрованный текст в стандартном режиме CBC до последнего блока.
сделать стандартный вызов расшифровки.
Исключительно - ИЛИ последний зашифрованный текст (уже был расшифрован на шаге 1) со вторым последним зашифрованным текстом.
Самоочевидно.
- Обрезать открытый текст до длины исходного зашифрованного текста.
Я нашел реализацию алгоритма AES в C, вы можете найти его с исходным кодом здесь.
Более старая реализация автора использовалась в Android. Поэтому я думаю, что реализация будет очень многообещающей.
Наконец, после того, как вы загрузили исходный код, проверьте файл aesxam.c
Есть очень хороший пример CTS с CBC для шифрования файлов.
Все кредиты идут на Брайана Гладмана.
Брайан Глэдман теперь поддерживает свой собственный репозиторий Github для AES.