Как сделать ключ шифрования из входной строки в Python? - PullRequest
0 голосов
/ 11 октября 2018

Я хочу написать функцию, которая даст пользователю ключ для кода шифрования, используя все 26 букв алфавита на основе фразы, которую они вводят, т. Е. Если пользователь введет «PYTHON», выводбудет выглядеть как "PYTHONABCDEFGIJKLMQRSUVWXYZ".Как бы я поступил так?

1 Ответ

0 голосов
/ 12 октября 2018

Существуют различные способы сделать это.Вам нужно обрабатывать любые дублирующиеся буквы в парольной фразе, хотя это не проблема для парольной фразы "PYTHON".Вы также должны игнорировать все пробелы в парольной фразе.

В этом коде я использую набор, чтобы дублированные буквы в парольной фразе игнорировались и чтобы другие буквы в алфавите не добавлялись к ключу, если они находятся в парольной фразе.

from string import ascii_uppercase

pass_phrase = 'PYTHON'
used = {' ', '\n'}
key = []
for c in pass_phrase.upper() + ascii_uppercase:
    if c not in used:
        key.append(c)
        used.add(c)
key = ''.join(key)
print(key)

output

PYTHONABCDEFGIJKLMQRSUVWXZ

Этот код преобразует парольную фразу в верхний регистр, но вам может не понравиться способ обработки не буквенных символов (кроме пробела)& перевод строки) в парольной фразе.;)


Вот один из способов, которым вы можете использовать ключ для кодирования и декодирования.

encode = {u: v for u, v in zip(ascii_uppercase, key)}
decode = {v: u for u, v in zip(ascii_uppercase, key)}

src = 'The quick brown fox jumps over the lazy dog.'
out = ''.join([encode.get(c, c) for c in src.upper()])
print(out)
decoded = ''.join([decode.get(c, c) for c in out.upper()])
print(decoded)

вывод

QAO KRBTD YLIUG NIV CRFJM ISOL QAO EPXW HI1.
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.

Процедуры кодирования и декодирования пропускают небуквенные символы без изменений с помощью .get(c, c).

...