Ім'я файлу: курсова (2).docx
Розширення: docx
Розмір: 294кб.
Дата: 14.03.2024
скачати

Завдання



Симетричне шифрування. Вибрати ключі та розробити блок-схему алгоритму та програму для шифрування файлу даних афінним шифром 2+(і mod 4) порядку. Тип афінного шифру визначається останньою цифрою і номера залікової книжки (НЗК).

def encrypt(data, a, b):

encrypted_data = []

for byte in data:

encrypted_byte = (a * byte + b) % 256

encrypted_data.append(encrypted_byte)

return bytes(encrypted_data)

def main():

# Введіть свій номер залікової книжки та останню цифру

student_id = int(input("Введіть номер залікової книжки: "))

last_digit = int(input("Введіть останню цифру: "))

# Визначення ключів

a = student_id

b = last_digit

# Читання вхідного файлу

input_file_path = input("Введіть шлях до вхідного файлу: ")

with open(input_file_path, 'rb') as file:

data = file.read()

# Шифрування даних

encrypted_data = encrypt(data, a, b)

# Збереження зашифрованих даних у вихідний файл

output_file_path = input("Введіть шлях до вихідного файлу: ")

with open(output_file_path, 'wb') as file:

file.write(encrypted_data)

print("Файл успішно зашифровано.")

if __name__ == "__main__":

main()

Отримуєм такий вивід



Асиметричне шифрування. 2.1. Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою цифрою і НЗК і задано в таблиці 1. Для генерування використати числа p та q, які визначаються передостанньою цифрою j НЗК і задані в таблиці 2. Букви тексту замінити натуральними числами, що відповідають порядковому номеру букви латинської абетки. Наприклад, А=00, B=01, C=02 і т.д.

import math

def gcd(a, b):

while b != 0:

a, b = b, a % b

return a

def find_mod_inverse(a, m):

m0, x0, x1 = m, 0, 1

while a > 1:

q = a // m

m, a = a % m, m

x0, x1 = x1 - q * x0, x0

return x1 + m0 if x1 < 0 else x1

def generate_keypair(p, q):

N = p * q

phi = (p - 1) * (q - 1)

e = 65537 # вибір публічного експонента (зазвичай використовується 65537)

d = find_mod_inverse(e, phi)

return (N, e), (N, d)

def text_to_numbers(text):

return [ord(char) - ord('A') for char in text]

def encrypt(message, public_key):

N, e = public_key

return [(char ** e) % N for char in message]

def main():

# Визначте ваші значення p та q з таблиці 2.

p_last_digit = 1 # Замініть це значення на передостанню цифру j НЗК.

q_last_digit = 7 # Замініть це значення на передостанню цифру j НЗК.

p = 61 # Виберіть просте число, що закінчується на p_last_digit.

q = 53 # Виберіть інше просте число, що закінчується на q_last_digit.

# Генерування ключів

public_key, private_key = generate_keypair(p, q)

# Введення слова відкритого тексту, яке визначається останньою цифрою і НЗК

word_last_digit = 9 # Замініть це значення на останню цифру з таблиці 1.

word = "HELLO" # Замініть це значення на слово, яке потрібно зашифрувати.

# Заміна букв тексту натуральними числами

message = text_to_numbers(word)

# Шифрування за допомогою алгоритму RSA

encrypted_message = encrypt(message, public_key)

print("Слово відкритого тексту:", word)

print("Зашифроване повідомлення:", encrypted_message)

if __name__ == "__main__":

main()

Вивід



Опис заданих систем шифрування



Розробка алгоритмів шифрування та розшифрування заданим афінним шифром

def gcd(a, b):

while b != 0:

a, b = b, a % b

return a

def find_mod_inverse(a, m):

m0, x0, x1 = m, 0, 1

while a > 1:

q = a // m

m, a = a % m, m

x0, x1 = x1 - q * x0, x0

return x1 + m0 if x1 < 0 else x1

def encrypt(text, a, b, m):

encrypted_text = []

for char in text:

encrypted_char = (a * char + b) % m

encrypted_text.append(encrypted_char)

return encrypted_text

def decrypt(encrypted_text, a, b, m):

a_inv = find_mod_inverse(a, m)

decrypted_text = []

for char in encrypted_text:

decrypted_char = (a_inv * (char - b)) % m

decrypted_text.append(decrypted_char)

return decrypted_text

# Приклад використання:

m = 26 # розмір алфавіту (кількість латинських літер)

a = 3 # ключ a

b = 7 # ключ b

# Відкритий текст

plaintext = [0, 11, 14, 11, 14] # "HELLO" перетворено у натуральні числа

# Шифрування

encrypted_text = encrypt(plaintext, a, b, m)

print("Зашифрований текст:", encrypted_text)

# Розшифрування

decrypted_text = decrypt(encrypted_text, a, b, m)

print("Розшифрований текст:", decrypted_text)



Таблиця ідентифікаторів, використаних в програм

Глобальні змінні:

    • m: Розмір алфавіту, тобто кількість можливих символів.

    • a, b: Ключі шифрування та розшифрування.

Функції:

    • gcd(a, b): Знаходження найбільшого спільного дільника.

    • find_mod_inverse(a, m): Знаходження мультиплікативно оберненого до encrypt(text, a, b, m): Шифрування тексту за афінним

    • decrypt(encrypted_text, a, b, m): Розшифрування зашифрованого тексту афінним шифром.

Основний блок коду:

    • Змінні:

      • plaintext: Відкритий текст у вигляді списку чисел.

      • encrypted_text: Зашифрований текст у вигляді списку чисел.

      • decrypted_text: Розшифрований текст у вигляді списку чисел.

Вивід результатів:

    • print("Зашифрований текст:", encrypted_text): Виводить зашифрований текст.

    • print("Розшифрований текст:", decrypted_text): Виводить розшифрований текст.


Текст програми.

def gcd(a, b):

while b != 0:

a, b = b, a % b

return a

def find_mod_inverse(a, m):

m0, x0, x1 = m, 0, 1

while a > 1:

q = a // m

m, a = a % m, m

x0, x1 = x1 - q * x0, x0

return x1 + m0 if x1 < 0 else x1

def encrypt(text, a, b, m):

encrypted_text = []

for char in text:

encrypted_char = (a * char + b) % m

encrypted_text.append(encrypted_char)

return encrypted_text

def decrypt(encrypted_text, a, b, m):

a_inv = find_mod_inverse(a, m)

decrypted_text = []

for char in encrypted_text:

decrypted_char = (a_inv * (char - b)) % m

decrypted_text.append(decrypted_char)

return decrypted_text

# Приклад використання:

m = 26 # розмір алфавіту (кількість латинських літер)

a = 3 # ключ a

b = 7 # ключ b

# Відкритий текст

plaintext = [0, 11, 14, 11, 14] # "HELLO" перетворено у натуральні числа

# Шифрування

encrypted_text = encrypt(plaintext, a, b, m)

print("Зашифрований текст:", encrypted_text)

# Розшифрування

decrypted_text = decrypt(encrypted_text, a, b, m)

print("Розшифрований текст:", decrypted_text)

Шифрування заданого слова за допомогою алгоритму RSA.

import math

def gcd(a, b):

while b != 0:

a, b = b, a % b

return a

def find_mod_inverse(a, m):

m0, x0, x1 = m, 0, 1

while a > 1:

q = a // m

m, a = a % m, m

x0, x1 = x1 - q * x0, x0

return x1 + m0 if x1 < 0 else x1

def generate_keypair(p, q):

N = p * q

phi = (p - 1) * (q - 1)

e = 65537 # вибір публічного експонента (зазвичай використовується 65537)

d = find_mod_inverse(e, phi)

return (N, e), (N, d)

def encrypt(message, public_key):

N, e = public_key

return [(char ** e) % N for char in message]

# Вхідні дані

word = "HELLO"

p = 61 # просте число

q = 53 # інше просте число

# Генерація ключів

public_key, _ = generate_keypair(p, q)

# Перетворення слова у натуральні числа (відповідно до ASCII кодів)

message = [ord(char) for char in word]

# Шифрування

encrypted_message = encrypt(message, public_key)

print("Вхідне слово:", word)

print("Зашифроване повідомлення:", encrypted_message)

Одержані результати

print("Вхідне слово:", word)

print("Зашифроване повідомлення:", encrypted_message)

Висновки

У ході цього взаємодії ми розробили алгоритми для афінного шифру та RSA шифрування на мові програмування Python.

Афінний шифр:

  • Розроблено програму для шифрування та розшифрування тексту афінним шифром.

  • Використані математичні концепції, такі як афінне перетворення, Найбільший Спільний Дільник (НСД) та мультиплікативно обернене число.

RSA шифрування:

  • Розроблено програму для шифрування слова алгоритмом RSA.

  • Використано концепції генерації ключів, публічного та приватного ключів, а також великих простих чисел.

Ці завдання надали можливість поглибити розуміння основних принципів шифрування, а також взаємодії з математичними концепціями, необхідними для забезпечення безпеки інформації при обміні. Програмний код служив інструментом для реалізації вивчених концепцій і продемонстрував їхню прикладність у сфері криптографії.

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

Перелік джерел:




  1. Криптография . [Електронний ресурс]. – Доступний з http://cryptolog.ru/


  2. Криптоалгоритмы: справочник. [Електронний ресурс]. – Доступний з http://www.bytemag.ru/articles/detail.php?ID=9058


  3. Атаки на алгоритмы шифрования. [Електронний ресурс]. – Доступний з http://www.bytemag.ru/articles/detail.php?ID=9053


  4. Информационная безопасность - Криптография. [Електронний ресурс]. – Доступний з http://itbezopasnost.ru/kriptografiya.html


Перелік літератури:




    1. Шеннон К. Теория связи в секретных системах / Шеннон К. // Работы по теории информации и кибернетике. – М. : Изд. Иностр. Лит, 1963. – С. 333 – 402.


    2. Вербіцький О. В. Вступ до криптології / О. В. Вербіцький. – Львів: "ВНТЛ", 1998.


    3. Лагун А. Е. Криптографічні системи та протоколи / А. Е. Лагун // Навч. посібник. – Львів : Вид-во Львівської політехніки, 2013. – 96 с.


    4. Венбо Мао. Современная криптография. Теория и практика. М: Вильямс, 2005. – 768 с.

скачати

© Усі права захищені
написати до нас