Как я могу зашифровать / расшифровать данные, используя режим AES CBC+CTS (шифрование текста) в PHP?

Я должен зашифровать и расшифровать данные в режиме AES CTS (кража зашифрованного текста, иногда называемая AES-XTS) в PHP для взаимодействия с удаленной системой, написанной на платформе.NET. В.NET 4 этот режим поддерживается изначально.

Для PHP я не могу найти решение, основанное на руководстве, mcrypt, похоже, не поддерживает этот режим.

Может кто-нибудь объяснить, пожалуйста, разницу между простым CBC и CBC-CTS? Можно ли заставить последний работать в PHP с использованием существующих модулей / библиотек?

2 ответа

Это шаги из статьи Википедии, вставленные в мои комментарии, объясняющие

  1. 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)

  2. Cn = Cn || Хвост (Дн, Б-М). Дополните зашифрованный текст до ближайшего кратного размера блока, используя последние B-M биты дешифрования блочного шифра второго за последним блока зашифрованного текста.

    Скопируйте последние n байтов значения, которое вы только что расшифровали, в последний блок зашифрованного текста.

    $ n = 16 - ($ second_to_last_clear% 16)

    Затем используйте копию массива для копирования данных

  3. Поменяйте местами последние два блока шифротекста.

    Просто поменяйте местами содержимое последней и второй двух последних ячеек в вашем массиве зашифрованного текста

  4. Расшифруйте зашифрованный текст в стандартном режиме CBC до последнего блока.

    сделать стандартный вызов расшифровки.

  5. Исключительно - ИЛИ последний зашифрованный текст (уже был расшифрован на шаге 1) со вторым последним зашифрованным текстом.

    Самоочевидно.

  6. Обрезать открытый текст до длины исходного зашифрованного текста.

Я нашел реализацию алгоритма AES в C, вы можете найти его с исходным кодом здесь.

Более старая реализация автора использовалась в Android. Поэтому я думаю, что реализация будет очень многообещающей.

Наконец, после того, как вы загрузили исходный код, проверьте файл aesxam.cЕсть очень хороший пример CTS с CBC для шифрования файлов.

Все кредиты идут на Брайана Гладмана.


Брайан Глэдман теперь поддерживает свой собственный репозиторий Github для AES.

Другие вопросы по тегам