Как включить пунктуацию и пробел в Vigenere Cipher [Python] - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь сделать дешифратор Vigenere Cipher.Сообщение расшифровывается с помощью текущего кода, который я написал.Тем не менее, он не учитывает пунктуацию и пробелы.Как мне заставить это рассмотреть эти два компонента?Ниже приведен мой код:

vigenered_message = 'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'

keyword = 'friends'

def vigenere_decrypt(encrypted_vigener, keyword):
    keyword_length = len(keyword)
    keyword_as_int = [ord(i) for i in keyword]
    encrypted_vigener_int = [ord(i) for i in encrypted_vigener]
    plaintext = ''
    for i in range(len(encrypted_vigener_int)):
        value = (encrypted_vigener_int[i] - keyword_as_int[i % keyword_length]) % 26
        plaintext += chr(value + 65)
    return plaintext

print(vigenere_decrypt(vigenered_message, keyword))

Это смещение должно быть следующим: «ВЫ МОЖЕТЕ РЕШИТЬ ЭТО?ХОРОШО СДЕЛАНО!Вы становитесь совсем экспертом по криптографии '

1 Ответ

0 голосов
/ 08 мая 2019

ПОПРОБУЙТЕ

vigenered_message = r'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'

keyword = 'friends'

def vigenere_decrypt(encrypted_vigener, keyword):
    keyword_length = len(keyword)
    keyword_as_int = [ord(i) for i in keyword]
    encrypted_vigener_int = [ord(i) for i in encrypted_vigener]
    plaintext = ''
    for i in range(len(encrypted_vigener_int)):
        if vigenered_message[i].isalpha():
            value = (encrypted_vigener_int[i] - keyword_as_int[i % keyword_length]) % 26
            plaintext += chr(value + 65)
        else:
            plaintext += vigenered_message[i]
    return plaintext

print(vigenere_decrypt(vigenered_message, keyword))

ВЫХОД:

YOU WERE ABLE TO DECODE THIS? NICE WORK! YOU ARE BECOMING QUITE THE EXPERT AT CRYTOGRAPHY!

Просто sidenote, вы должны присвоить строку переменной в rawв противном случае форматирование таких символов, как \, ", ' внутри вашей строки, может создавать прерывания в потоке программы.

ИСПОЛЬЗОВАТЬ ЭТО:

vigenered_message = r'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'

НЕ ЭТО:

vigenered_message = 'dfc jhjj ifyh yf hrfgiv xulk? vmph bfzo! qtl eeh gvkszlfl yyvww kpi hpuvzx dl tzcgrywrxll!'
...