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

КРИПТА1

.py
Скачиваний:
16
Добавлен:
29.06.2023
Размер:
5 Кб
Скачать
# Создание словарей
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)
Соседние файлы в предмете Криптографические методы защиты информации