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

ЛР / laba_py(2)

.docx
Скачиваний:
0
Добавлен:
07.06.2026
Размер:
64.21 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

Факультет Информационных технологий и программной инженерии

Кафедра систем обработки данных

ОТЧЕТ

по практике №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

Соседние файлы в папке ЛР