Для запуска программы необходимо выполнить скрипт mainWindow.py
Приложение включает в себя следующие модули:
- ChiSqr
- DES
- DiffieHellman
- Feistel
- Hash
- Hill
- PrimeNumbers
- PrimitiveRoots
- RSA
- XOR
Далее следует краткое описание каждого модуля.
Этот модуль предоставляет возможности для тестирования скремблера с заданным полиномом и начальным значением. Модуль находит период последовательности, а также считает показатель Хи-квадрат указывающий насколько генерируемая последовательность приближена к равномерному распределению.
Этот модуль предоставляет возможность шифрования и дешифрования текста с помощью блочного алгоритма шифрования DES.
Этот модуль предоставляет возможность симуляции передачи ключа по протоколу Диффи-Хеллмана. Пользователь может вручную задавать открытый ключ (n, g), а также секретные числа каждого из пользователей A и B. Также можно сгенерировать все значения автоматически.
Этот модуль предоставляет возможность шифрования и дешифрования данных с помощью сети Фейстеля. Пользователь выбирает файл с тектом для шифрования или дешифрования, а также файл с ключом. Текст и ключ записываются в соответствующие поля и пользователь может менять представление текста и ключа в символьном или шестнадцатеричном виде. Зашифрованый/дешифрованый текст записывается в файл, указанный пользователем. Также пользователь может выбирать одну из двух образующих функций сети, а также один из двух методов генерации ключа. Также модуль предоставляет возможность посчитать лавинный эффект сети.
Образующие функции:
Функция 1:
def black_box_a(a, b):
return b
Функция 2:
def black_box(a, b):
return pow(a * b, 545735704168155525106215935941802819184685939157133628190496058664778626084654658157215100397614, 2 ** (self.blocksize // 2) - 1)
Методы генерации ключа:
Метод 1:
def generate_round_keys(self) -> list:
round_keys = []
bin_key = bin(self.key)[2:]
for i in range(self.rounds_count):
key = ""
for j in range(32):
key += bin_key[(i+j) % len(bin_key)]
round_keys.append(int(key, 2))
return round_keys
Метод 2:
def generate_round_keys_a(self) -> list:
round_keys = []
polynom = [9, 1, 0]
bin_key = bin(self.key)[2:]
for i in range(self.rounds_count):
root = ""
for j in range(8):
root += bin_key[(i + j) % len(bin_key)]
root = int(root, 2)
scrembler = LFSR.LFSR(polynom, root)
bits = "".join(map(str, list(scrembler.get_bits(32))))
round_keys.append(int(bits, 2))
return round_keys
Этот модуль предоставляет возможность генерации цифровой подписи для файлов, а также проверки цифровой подписи файлов по алгоритмам RSA и Эль-Гамаля.
Этот модуль предоставляет возможность шифрования и дешифрования текста с помощью шифра Хилла. Шифр использует следующий алфавит:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\]^_`АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя
Этот модуль используется для генерации простых чисел заданной длины а также для генерации всех простых чисел из диапазона. Пользователь указывает битовую длину числа, а также количество тестов Миллера-Рабина, которое должно пройти сгенерированное число. Программа выводит время затраченное на генерацию простого числа, а также количество итераций генерации, потребовавшихся для достижения необходимой точности и время генерации числа. Кроме того программа выводит вероятность того, что число простое.
Модуль используется для поиска первых 100 первообразных корней для заданного модуля. Программа выводит список корней, а также время, затраченное на их поиск. Количество выведенных корней может быть менее 100, если от 1 до n, таких корней меньше 100 для заданного корня.
Этот модуль позволяет шифровать текст с помощью алгоритма DES, при этом ключ к DES шифруется с помощью RSA.
Этот модуль предоставляет возможность шифрования и дешифрования текста с использованием XOR-шифрования. Текст для шифрования и ключ записываются в соответствующие поля из выбранных пользователем файлов. Пользователь может изменять вид текста и ключа на символьный, двоичный или шестнадцатеричный. Зашифрованный текст записывается в файл, а также в соответствующее поле, вид которого также может быть изменен. Кроме выбора ключа из файла пользователь может сгенерировать ключ случайным образом с помощью сдвигового регистра с линейной обратной связью (LFSR), построенного на выбранном пользователем полиноме.
В папке каждого из модулей находятся файлы нескольких типов:
.py
файлы с постфикосм_interface
в названии. В этих файлах описан графический интерфейс пользователя данного модуля, но нет подвязки к логике..ui
файлы, это файлы QtDesigner'а, в которых также описан графический интерфейс пользователя для данного модуля..py
файлы с таким же названием как и сам модуль. Это главный файл модуля. В нём элементы интерфейса привязываются к логике. Запустив этот файл, можно запустить сам модуль, отдельно от остальной программы.- Остальные
.py
файлы используются при необходимости. В них может быть вынесена часть логики.tests.py
файлы могут использоваться для проведения некоторых тестов во время разработки. - Другие файлы не должны влиять на работу модуля и программы в общем.