Входной файл: | input.txt | Ограничение времени: | 1 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 256 Мб |
Необходимо реализовать шифрование Сетью Фейстеля
Псевдокод шифрования:
for i in range(blocks):
for r in range(rounds):
TEMP = L[i]
L[i] = R[i]
R[i] = TEMP XOR F(K[r], R[i])
L[i]
- первая половина i
-го блока
R[i]
- вторая половина i
-го блока
K[r]
- ключ шифрования на r
-ом раунде, в данной задаче размер ключа равен размеру половины блока
F
- функция шифрования, в данной задаче используется XOR
В случае если длина строки не кратна размеру блока, строка дополняется символами '\0'
Половины блока имеют одинаковую длину
Длина блока всегда четная
Первая строка входного файла содержит количество тестов N
Первая строка теста: 2 целых числа - количество раундов, размер блока в байтах
Вторая строка теста: раундовые ключи шифрования одной HEX строкой
Третья строка теста: целевая ASCII строка, которую необходимо зашифровать
Выходной файл должен содержать N
строк - шифротекстов HEX-ом для каждой целевой строки
Длина строки <= 65536
Размер блока <= 64
Кол-во раундов <= 32
Кол-во тестов <= 335
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|