1
0
Jelajahi Sumber

Merge branch 'master' of http://213.155.192.79:3001/ypv/up

ypv 5 bulan lalu
induk
melakukan
7063c1f361

+ 14 - 0
ОАиП/2024-25/36гр/Программы/Работы студентов/Подвербный игорь/Проэкт по программирование шифрование методом вижинера.txt

@@ -0,0 +1,14 @@
+Для выполнения своей работы я использовал SQL таблицу для занесения заранее подготовленного алфавита, а также для сохранения в таблицу выбранного пользователем шифра. Я использовал SQLite3.
+
+Сначала вводится алфавит и его длина, при этом выполняется проверка корректности ввода. В итоге алфавит заносится в специальную таблицу, созданную в нашей базе данных SQL. Если мы выбираем заранее подготовленный алфавит, нам предлагается выбор из трех вариантов: русский алфавит без буквы "ё", полный русский алфавит, и полный алфавит с подчеркиванием в конце.
+
+После этого нам предлагается выбрать действие: шифрование, дешифрование или выход из программы. Полагаю, тут все ясно.
+
+После выбора действия мы можем зашифровать слово или предложение, которое также заносится в SQL таблицу. Я сделал вид таблицы таким же, как мы делали в наших тетрадях: алфавит сверху, ключ слева.
+
+Шифруем наш текст или слово. Для дешифровки нет необходимости вводить сообщение заново — оно будет браться из таблицы с текстом. Это сделано для удобства, чтобы нам не приходилось многократно вводить длинный текст.
+
+В конце, когда все действия выполнены, мы можем ввести команду "exit" для завершения программы.
+
+Дешифрование работает по следующему методу у нас есть алфавит и есть слово которое мы шифруем оно находит букву слова в алфавите и спускаеться вниз и поворачивает налево до тех пор пока не буква слова не совпадет с ключем в этом случае программа найдет пересечение и пересеченная буква будет нашим зашифрованным тестом и так все наше предложение.
+Дешифровка выполняеться обратным методом 

+ 110 - 0
ОАиП/2024-25/36гр/Программы/Работы студентов/Подвербный игорь/ШИФРОВАНИЕ ВИЖИНЕРОМ.py

@@ -0,0 +1,110 @@
+import sqlite3
+
+def create_tables():
+    conn = sqlite3.connect('alphabets.db')
+    cursor = conn.cursor()
+    cursor.execute('''CREATE TABLE IF NOT EXISTS alphabets
+                      (id INTEGER PRIMARY KEY, name TEXT, alphabet TEXT)''')
+    cursor.execute('''CREATE TABLE IF NOT EXISTS encrypted_texts
+                      (id INTEGER PRIMARY KEY, encrypted_text TEXT)''')
+    cursor.execute('''INSERT INTO alphabets (name, alphabet) VALUES
+                      ('Полный русский алфавит', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'),
+                      ('Без буквы ё', 'абвгдежзийклмнопрстуфхцчшщъыьэюя'),
+                      ('С подчеркиванием', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя_')''')
+    conn.commit()
+    conn.close()
+
+def get_custom_alphabet():
+    length = int(input("Введите длину алфавита: "))
+    alphabet = input(f"Введите свой алфавит ({length} символов): ")
+    if len(alphabet) != length:
+        print("Длина алфавита не соответствует заданной!")
+        return None
+    return alphabet
+
+def get_preset_alphabet(choice):
+    conn = sqlite3.connect('alphabets.db')
+    cursor = conn.cursor()
+    cursor.execute('SELECT alphabet FROM alphabets WHERE id=?', (choice,))
+    alphabet = cursor.fetchone()[0]
+    conn.close()
+    return alphabet
+
+def save_encrypted_text(text):
+    conn = sqlite3.connect('alphabets.db')
+    cursor = conn.cursor()
+    cursor.execute('INSERT INTO encrypted_texts (encrypted_text) VALUES (?)', (text,))
+    conn.commit()
+    conn.close()
+
+def get_last_encrypted_text():
+    conn = sqlite3.connect('alphabets.db')
+    cursor = conn.cursor()
+    cursor.execute('SELECT encrypted_text FROM encrypted_texts ORDER BY id DESC LIMIT 1')
+    encrypted_text = cursor.fetchone()[0]
+    conn.close()
+    return encrypted_text
+
+def vigenere_encrypt(plaintext, key, alphabet):
+    encrypted = ''
+    alphabet_len = len(alphabet)
+    key_indices = [alphabet.index(char) for char in key]
+    for i, char in enumerate(plaintext):
+        if char in alphabet:
+            plain_idx = alphabet.index(char)
+            key_idx = key_indices[i % len(key)]
+            encrypted += alphabet[(plain_idx + key_idx) % alphabet_len]
+        else:
+            encrypted += char
+    return encrypted
+
+def vigenere_decrypt(ciphertext, key, alphabet):
+    decrypted = ''
+    alphabet_len = len(alphabet)
+    key_indices = [alphabet.index(char) for char in key]
+    for i, char in enumerate(ciphertext):
+        if char in alphabet:
+            cipher_idx = alphabet.index(char)
+            key_idx = key_indices[i % len(key)]
+            decrypted += alphabet[(cipher_idx - key_idx) % alphabet_len]
+        else:
+            decrypted += char
+    return decrypted
+
+def main():
+    create_tables()
+    
+    choice = int(input("Введите 1 для своего алфавита, 2 для заготовленного: "))
+    if choice == 1:
+        alphabet = get_custom_alphabet()
+    else:
+        preset_choice = int(input("Выберите заготовленный алфавит (1 полный Рсский алфавит без ё, 2 с ё, или 3 с _ в конце ): "))
+        alphabet = get_preset_alphabet(preset_choice)
+    
+    if not alphabet:
+        print("Ошибка с алфавитом!")
+        return
+    
+    print(f"Ваш алфавит: {alphabet}")
+    
+    while True:
+        action = input("Введите 'шифр' для шифрования, 'дешифр' для расшифрования, 'exit' для выхода: ")
+        if action == 'шифр':
+            key = input("Введите ключ: ")
+            plaintext = input("Введите текст для шифрования: ")
+            encrypted_text = vigenere_encrypt(plaintext, key, alphabet)
+            print(f"Зашифрованный текст: {encrypted_text}")
+            save_encrypted_text(encrypted_text)
+        elif action == 'дешифр':
+            key = input("Введите ключ: ")
+            ciphertext = get_last_encrypted_text()
+            decrypted_text = vigenere_decrypt(ciphertext, key, alphabet)
+            print(f"Расшифрованный текст: {decrypted_text}")
+        elif action == 'exit':
+            print("Программа завершена.")
+            break
+        else:
+            print("Неверная команда, попробуйте снова.")
+
+if __name__ == '__main__':
+    main()