Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПУА / 1_6 (1)

.py
Скачиваний:
2
Добавлен:
18.08.2022
Размер:
2 Кб
Скачать
# №6. Гаммирование. (Псевдослучайные последовательности).
# Реализовать одну их схем регистров сдвига.
# Использовать полученный генератор псевдослучайных последовательностей как ключ для XOR-кодирования сообщения.
# Реализовать кодирование/декодирование сохраненного в файле текста на основе генератора псевдослучайной
# последовательности для русского алфавита, знаков препинания и цифр.

with open('input.txt', 'r', encoding='utf-8') as infile:
input_text = infile.read()


def xor(text, key):
encrypted_text = ''
for letter in range(len(text)):
encrypted_text += chr(ord(text[letter]) ^ ord(key[letter]))
return encrypted_text


def register_shift(states):
generated_bytes = []
for i in range(len(states)):
next_el = states[len(states) - 1] ^ states[len(states) - 2]
generated_bytes.append(states.pop())
states.insert(0, next_el)
generated_bytes = [str(item) for item in generated_bytes]
generated_bytes_in_string = ''.join(generated_bytes)
symbol = chr(int(generated_bytes_in_string, base=2))
return symbol, states


len_text = len(input_text)
input_key = input('Ключ: ')
bin_key = bin(ord(input_key)).replace('0b', '')
state = list(bin_key)
state = [int(item) for item in state]
for j in range(len(input_text)):
sym, state = register_shift(state)
input_key += sym
print('\n', input_key)

print('\nОригинал текста:\t', input_text, '\n')
encrypted = xor(input_text, input_key)
print('Закодированный текст:\t', encrypted, '\n')
print('Декодированный текст:\t', xor(encrypted, input_key), '\n')
Соседние файлы в папке ПУА