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

КРИПТА1

.py
Скачиваний:
12
Добавлен:
29.06.2023
Размер:
4.69 Кб
Скачать
# Создание словарей
alphabet = {'а': 0, 'б': 1, 'в': 2, 'г': 3, 'д': 4, 'е': 5, 'ё': 6, 'ж': 7, 'з': 8, 'и': 9, 'й': 10, 'к': 11,
'л': 12, 'м': 13, 'н': 14, 'о': 15,
'п': 16, 'р': 17, 'с': 18, 'т': 19, 'у': 20, 'ф': 21,
'х': 22, 'ц': 23, 'ч': 24, 'ш': 25, 'щ': 26, 'ъ': 27, 'ы': 28, 'ь': 29, 'э': 30, 'ю': 31, 'я': 32}
Alph = {'А': 0, 'Б': 1, 'В': 2, 'Г': 3, 'Д': 4, 'Е': 5, 'Ё': 6, 'Ж': 7, 'З': 8, 'И': 9, 'Й': 10, 'К': 11,
'Л': 12, 'М': 13, 'Н': 14, 'О': 15,
'П': 16, 'Р': 17, 'С': 18, 'Т': 19, 'У': 20, 'Ф': 21,
'Х': 22, 'Ц': 23, 'Ч': 24, 'Ш': 25, 'Щ': 26, 'Ъ': 27, 'Ы': 28, 'Ь': 29, 'Э': 30, 'Ю': 31, 'Я': 32}
# Обратные словари
keys = {}
Keys = {}
mark = "йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ" # Буквы русского алфавита
n = 33 # Длина алфавита
ak = []
bk = []
for j in alphabet:
keys[alphabet[j]] = j
for j in Alph:
Keys[Alph[j]] = j
# Функция для шифрования и расшифрования одной буквы
def Encryption(letter,a,b,n):
x = 0
y = 0
# Получение позиции буквы в алфавите -1
if alphabet.get(letter) != None:
x = (alphabet[letter])
x = ((a * x + b) % n)
crypt_letter = str(keys[x])
else:
y = (Alph[letter])
y = ((a * y + b) % n)
crypt_letter = str(Keys[y])
return (crypt_letter)
def Decryption(letter,a,b,n):
# Получение обратного числа a
i = 1
while i < n:
if a * i % n == 1:
A = i
i += 1
x = 0
y = 0
# Получение позиции буквы в алфавите -1
if alphabet.get(letter) != None:
x = (alphabet[letter])
D = (A * (x - b)) % n
let = keys[D]
else:
y = (Alph[letter])
D = (A * (y - b)) % n
let = Keys[D]
return let

text = input("Введите текст ")
flag = int(input("0 - Обычный, 1 - Рекуррентный,"))
if flag == 0:
Flag = int(input("0 - Зашифровать, 1 - расшифровать "))
a = int(input("Введите ключ a: ")) # Ключ a
b = int(input("Введите ключ b: ")) # Ключ b
if Flag == 0:
# Шифрование текста
i = 0
crypt_Text="" # Зашифрованный текст
while i < len(text):
if text[i] in mark:
crypt_Text+= Encryption(text[i],a,b,n)
else:
crypt_Text+= text[i]
i+=1
print(crypt_Text)
else:
crypt_Text= text
text = ""
i = 0
#Расшифрование
while i < len(crypt_Text):
if crypt_Text[i] in mark:
text+= Decryption(crypt_Text[i],a,b,n)
else:
text+= crypt_Text[i]
i+=1
print(text)
elif flag==1:
Flag = int(input("0 - Зашифровать, 1 - расшифровать "))
ak.append(int(input("Введите первый ключ a1 ")))
ak.append(int(input("Введите второй ключ a2 ")))
bk.append(int(input("Введите первый ключ b1 ")))
bk.append(int(input("Введите второй ключ b2 ")))
i = 0
count = 0
while i < len(text):
if text[i] in mark:
count += 1
i += 1
i = 0
# Вычисление дополнительных ключей
while i < count - 2:
ak.append((ak[i] * ak[i + 1]) % n)
bk.append((bk[i] + bk[i + 1]) % n)
i += 1
#print(ak)
i = 0
j = 0
if Flag == 0:
crypt_Text = "" # Зашифрованный текст
while i < len(text):
if text[i] in mark:
crypt_Text += Encryption(text[i], ak[j], bk[j], n)
j+= 1
else:
crypt_Text += text[i]
i += 1
print(crypt_Text)
else:
i = 0
Text =''
j = 0
while i < len(text):
if text[i] in mark:
Text += Decryption(text[i], ak[j], bk[j], n)
j += 1
else:
Text += text[i]
i += 1
print(Text)
Соседние файлы в предмете Криптографические методы защиты информации