Created by N1ck, 2024
Данный алгоритм предоставлен исключительно в ознакомительных и/или образовательных целях. Автор не несет никакой ответсвенности за последствия внедрения данного алгоритма в Ваши проекты и/или продукты коммерческого характера.
Алгоритм для симметричного шифрования, разработанный фирмой IBM и утверждённый правительством США в 1977 году как официальный стандарт (FIPS 46-3). Размер блока для DES равен 64 битам. В основе алгоритма лежит сеть Фейстеля с 16 циклами (раундами) и ключом, имеющим длину 56 бит. Алгоритм использует комбинацию нелинейных (S-блоки) и линейных (перестановки E, IP, IP-1) преобразований.
- AES
- Лекция Шакурского М. В. по криптографическому стандарту AES
- Отчет с подробным описанием работы программы
permute(block, table)
: Эта функция применяет перестановку к блоку данных на основе таблицы перестановок.split(input)
: Эта функция разбивает входную строку на две равные части.xor(bits1, bits2)
: Выполняет операцию XOR между двумя строками битов.left_shift(bit_string, shift_count)
: Сдвигает строку битов влево на указанное количество позиций.
Генерация подключей:
generate_subkeys(key)
: Эта функция создает 16 48-битных подключей на основе 64-битного ключа. Она использует таблицы перестановок PC1 и PC2, а также таблицу сдвигов LEFT_SHIFTS для создания каждого подключа.
Шифрование:
sbox_substitution(input, sbox)
: Это функция преобразует 6-битный вход в 4-битный выход на основе заданной S-бокс таблицы.f_function(right, subkey)
: Это функция расширяет 32-битный вход до 48 бит, затем выполняет операцию XOR с подключом, применяет 8 S-бокс таблиц к результату и затем применяет P-перестановку.des_encrypt(plain_text_bits, key)
: Эта функция реализует основной алгоритм шифрования DES. Она применяет начальную перестановку, выполняет 16 раундов шифрования, используя подключи, и затем применяет итоговую перестановку.
Программа состоит из нескольких файлов: ВES.py, main.py, lib.py, test.py
.
В файле DES реализован основной криптографический алгоритм со всеми функциями.
Файл test.py
содержит в себе функцию для проверки и вывода сгенерированных раундовых ключей (16)
В файле lib.py
указаны основные матричные постоянные: IP, INV_IP, S, E, P, PC1, PC2
.
Файл main.py
демонстрирует работу алгоритма на данных, вводимых с клавиатуры.
MIT
Free Software, GLHF!