Проблемы дешифрования Vigenere Cipher - PullRequest
0 голосов
/ 22 марта 2020
key = "password"
def cipher(text): #my example cipher method
    encoded_chars = []
    for i in range(len(text)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(text[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return (encoded_string)


def decipher(text):
    dec = []
    text = base64.urlsafe_b64encode(b"'{text}'").decode()
    print('text')
    for i in range(len(text)):
        key_c = key[i % len(key)]
        dec_c = chr((256 + ord(text[i]) - ord(key_c)) % 256)
        dec.append(text)
    return str(dec_c)
    enter code here
print(decipher("test"))

После успешного шифрования с помощью Vigenere Cipher я получаю что-то вроде этого: b'\xc2\xbd\xc2\xb8\xc3\x83\xc3\x80' Я хотел бы расшифровать эту строку с кодом выше и превратить ее обратно в текст «пароль», однако, когда я пытаюсь расшифровать мой текст оставляет меня с другой зашифрованной строкой. Может кто-нибудь объяснить, что я делаю не так с моей расшифровкой?

1 Ответ

1 голос
/ 22 марта 2020

Не ясно, что вы пытаетесь сделать с библиотекой base64. Кроме того, вы путаете переменные come в вашем методе дешифрования:

    dec.append(text) # text is the passed in argument.
                     # Why append it to the result
return str(dec_c)    # this is the last element in the loop
                     # why return this rather than the list you made above?

Ничто из вышеперечисленного не имеет особого смысла. Может быть, что-то вроде этого заставит двигаться в правильном направлении:

key = "password"
def cipher(text): #my example cipher method
    encoded_chars = []
    for i in range(len(text)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(text[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return (encoded_string)


def decipher(text):
    dec = []
    for i in range(len(text)):
        key_c = key[i % len(key)]
        dec_c = chr((256 + ord(text[i]) - ord(key_c)) % 256)
        dec.append(dec_c)
    return "".join(dec)

plain = "some text to encrypt"

encrypted = cipher(plain)
print("encrypted: ", encrypted)

decrypted = decipher(encrypted)   
print("decrypted: ", decrypted)

Отпечатки:

encrypted:  ãÐàØã×ÜäçâÔàÇâÚãç
decrypted:  some text to encrypt
...