Как изменить программу шифрования caeser на python, чтобы она поддерживала больше символов, таких как пробел, '$', '&', '%' и т. Д.? - PullRequest
0 голосов
/ 13 мая 2019

Я могу написать программу на python для шифрования и дешифрования в шифре Цезаря. Но я хочу изменить программу, добавив в нее больше символов, таких как пробел, '$', '&', '%' и т. Д.

ниже приведен оригинальный код

def encrypt(text,s): 
    result = "" 

    # traverse text 
    for i in range(len(text)): 
        char = text[i] 

        # Encrypt uppercase characters 
        if (char.isupper()): 
            result += chr((ord(char) - (s-65)) % 26 + 65) 

        # Encrypt lowercase characters 
        else: 
            result += chr((ord(char) - (s - 97)) % 26 + 97) 

    return result

1 Ответ

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

это вариант:

from string import ascii_lowercase

alphabet = ascii_lowercase + '$&%'

def encrypt(plain, key):
    table = str.maketrans(alphabet, key)
    return plain.translate(table)

str.maketrans создаст таблицу, которую затем можно будет использовать в str.translate для сопоставления всех символов из alphabet с их перетасованными аналогами. Вы можете использовать его как:

from random import shuffle

key_list = list(alphabet)
shuffle(key_list)
key = ''.join(key_list)      # kd&ygphtcjxsfwrqo%$zianmvuebl
encrypt('hello world', key)  # tgssr nr%sy

Ваш алфавит, кажется, также включает заглавные буквы; для этого просто измените:

from string import ascii_letters
alphabet = ascii_letters + '$&%'

обратите внимание, что key должна иметь ту же длину, что и alphabet.

...