ЛР / laba_py(2)
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
Факультет Информационных технологий и программной инженерии
Кафедра систем обработки данных
ОТЧЕТ
по практике №2
по дисциплине «Программирование на языке Питон»,
по теме: «Использование операторов и работа с примитивными типами. Приложение, реализующее побитовые операции».
|
Выполнили студенты группы ИСТ-223: Хакова Ю. М. Коваленко А. А.
|
|
|
|
|
|
Принял: Бородянский Ю. М. |
|
|
(подпись) |
|
|
|
|
|
|
|
Цель работы :
Изучение общих принципов программирования в среде Python.
Написание приложения, осуществляющего «шифрование» текста путем преобразования символов с помощью побитовых операций.
Задание
Необходимо создать консольное приложение, осуществляющее «шифрование» небольшого текста путем сложения по "XOR" числового кода каждого символа с ключом "sekret". Кроме сложения по "XOR", приложение должно поддерживать шифрование с помощью циклического сдвига на заданное число позиций. Текст для шифрования взять произвольно в количестве не менее трех строк. Приложение должно иметь текстовое меню со следующими пунктами:
Шифрование с помощью операции "XOR"
Шифрование с помощью циклического сдвига
Ввести число позиций для шифрования путем циклического сдвига
При выборе пунктов 1 и 2, приложение должно распечатывать исходный текст, зашифрованный текст и расшифрованный текст.
При выборе пункта 3 приложение должно запросить у пользователя число, которое определяет величину сдвига, затем также распечатать исходный, зашифрованный и расшифрованный текст. Числовое значение буквы исходного текста брать по её порядковому номеру в алфавите. Так букве "А" соответствует число 1, букве "Б" соответствует число 2 и т.д. Регистр букв не учитывать.
Ход работы:
Рис. 1. Отображение меню в консоли.
Рис. 2. Побитовое шифрование и расшифровка текста операцией «исключающее ИЛИ».
Рис. 3. Шифрование и расшифровка текста циклическим сдвигом (шифр Цезаря).
Вывод:
Практическое применение данного кода может реализовываться в таких сферах как:
Защита данных: Криптография используется для обеспечения конфиденциальности данных. Например, при передаче личных сообщений через интернет или хранении файлов на компьютере.
Безопасность в сетях: Шифрование обеспечивает защиту данных при передаче через сети, такие как интернет или корпоративные сети.
Приложение 1.
Листинг кода:
def XOR_cipher():
text = input("Текст для шифрования: ")
key = input("Ключ: ")
key = key_length(key, len(text))
print("Текст для шифрования:", text)
encrypted_text = do_cipher(text, key)
print("Зашифрованный текст:", encrypted_text)
decrypted_text = do_cipher(encrypted_text, key)
print("Расшифрованный текст:", decrypted_text)
def key_length(key, length):
new_key = key
while len(new_key) < length:
new_key += key
return new_key[:length]
def do_cipher(text, key):
result = []
alphabet = "абвгдежзиклмнопрстуфхцчшщъыьэюя "
for i in range(len(text)):
text_index = alphabet.index(text[i])
key_index = alphabet.index(key[i])
cipher_index = (text_index ^ key_index) % len(alphabet) #побитовое или + деление, чтобы не выходил за пределы алфавита
result.append(alphabet[cipher_index])
return ''.join(result)
def cyclic_shift():
text = input("Текст для шифрования: ")
key = int(input("Величина сдвига: "))
encrypted_chars = []
for char in text:
if char.isalpha():
encrypted_char = chr(((ord(char) - ord('а') + key) % 33) + ord('а'))
encrypted_chars.append(encrypted_char)
else:
encrypted_chars.append(char)
encrypted_text = ''.join(encrypted_chars)
print("Зашифрованный текст:")
print(encrypted_text)
decrypted_chars = []
for char in encrypted_text:
if char.isalpha():
decrypted_char = chr(((ord(char) - ord('а') - key) % 33) + ord('а'))
decrypted_chars.append(decrypted_char)
else:
decrypted_chars.append(char)
decrypted_text = ''.join(decrypted_chars)
print("Расшифрованный текст:")
print(decrypted_text)
def main():
while True:
print('\n1. Шифрование с помощью операции "XOR"')
print('2. Шифрование с помощью циклического сдвига')
print('3. Выход')
choice = input("Выберите опцию: ")
if choice == '1':
XOR_cipher()
elif choice == '2':
cyclic_shift()
elif choice == '3':
print("Выход из программы.")
break
else:
print("Неверный выбор.")
main()
Санкт-Петербург, 2024
