Программа Vigenere Cipher Python - PullRequest
0 голосов
/ 05 ноября 2019

Как вы запрограммируете этот шифр Vigenere?

У меня проблема, когда я шифрую и дешифрую шифр Цезаря и Вигенера, и мне трудно его придумать. Мне не разрешено изменять любой код. Я могу только добавить код под определениями. У меня есть это на github.

https://github.com/michaelschmitt39/encryption

Мне предоставлена ​​дополнительная информация:

О шифре Vigenere: ключ, используемый шифром Vigenere, является строкой,И что более важно, это должна быть подстрока, извлеченная из простого текста. Предположим, что ключ «Боб», так как длина «Боб» меньше, чем простой текст, вам необходимо добавить ключ к той же длине простого текста перед шифрованием:

Первая буква, «A», шифруется буквой «B». Это означает, что «B» имеет индекс 13 в списке поиска, так что «A» затем сместится вниз на 13 позиций и станет «b». Другой пример - вторая буква «l», зашифрованная буквой «o», индекс которой равен 7 на основе списка поиска. Таким образом, «l» сместится вниз на 7 позиций и станет «o» после шифрования. Реализуйте методы шифрования и дешифрования для шифра Vigenere. Метод encrypt принимает простой текст в качестве входных данных и генерирует его зашифрованный аналог с именем cipher_text. Метод decrypt расшифровывает cipher_text и возвращает простой текст.

У меня действительно есть некоторые проблемы с Vigenere. Когда код отображается для if-name-main, на этом сайте он показывает его неправильно, но предполагает, что он правильный. Фактический код должен выглядеть следующим образом -> if__name __ == "main":

Я пробовал несколько вещей. Я знаю, что должен набить ключ, и я считаю, что это моя проблема.

Простой текст

plain_text = "Переговоры между Объединенным профсоюзом работников автомобильной промышленности и General Motors \" завершились поворотомк худшему, по словам главного переговорщика профсоюза, предполагая, что ближайшей забастовки автопрома за последние десятилетия не предвидится никакого непосредственного конца. Неудача в переговорах последовала за несколькими днями сообщения о прогрессе между двумя сторонами. Они надеются заключить новое четырехлетнее соглашение. Терри Диттс, вице-президент переговорной группы профсоюза работников автомобильной промышленности США, разослал членам Совета в полдень воскресенья письмо, в котором говорилось, что профсоюз счел последнее предложение по контракту компании абсолютно неприемлемым для профсоюза. "

def look_up_list_gen(text):
    return list(text)  


class CaesarCipher:
    alphabet = list('abcdefghijklmnopqrstuvwxyz')

    def __init__(self, key):
        assert(key > 0 and type(key) == int)
        self.key = key


    def encrypt(self, plain_text):
        cipher_text = look_up_list_gen(plain_text)
        encrypt_text = ''
        for letter in cipher_text:
            letter = letter.lower()
            if letter in self.alphabet:
                encrypt_text += self.alphabet[(self.alphabet.index(letter) + self.key) % 26 ]
            else:
                encrypt_text += letter
        self.cipher_text = encrypt_text




    def decrypt(self, plain_text):
        cipher_text = look_up_list_gen(plain_text)
        decrypt_text = ''

        for letter in cipher_text:
            if letter in self.alphabet:
                decrypt_text += self.alphabet[(self.alphabet.index(letter) - self.key) % 26 ]
            else:
                decrypt_text += letter

        return decrypt_text




class VigenereCipher:
    def __init__(self, key, look_up_list):
        assert(type(key) == str)
        self.key = key



    def encrypt(self, plain_text):
        assert(len(self.key) <= len(plain_text))



    def decrypt(self):
        assert(len(self.key) <= len(plain_text))



if __name__ == "__main__":
    caesar = CaesarCipher(3)
    caesar.encrypt(look_up_list_gen(plain_text))
    print("Encrypted text: ",caesar.cipher_text)
    print("""
                ---------------------------- 
    """)
    print("Decrypted text: ",caesar.decrypt(caesar.cipher_text).capitalize())

    vigenere = VigenereCipher(plain_text[:5],look_up_list_gen(plain_text))
    vigenere.encrypt(plain_text)
    print("Encrypted text: ",vigenere.cipher_text)
    print("Decrypted text: ",vigenere.decrypt())
...