【问题标题】:How to make an encryption key from an input string in Python?如何从 Python 中的输入字符串制作加密密钥?
【发布时间】:2019-03-17 00:45:08
【问题描述】:

我想编写一个函数,它会根据用户输入的短语使用字母表中的所有 26 个字母为用户提供一个加密代码的密钥,即,如果用户输入“PYTHON”,则输出看起来像“PYTHONABCDEFGIJKLMQRSUVWXYZ”。我该怎么做呢?

【问题讨论】:

  • 这里的总体目标是什么?您是在寻找行业标准的加密还是玩具程序?
  • @roganjosh 我猜是玩具。 “加密”字符串似乎是 ${USER_INPUT} + ${ALPHABET - LETTERS_IN_USER_INPUT}....
  • @Pes 此处的预期输出是用于simple substitution cipher 的混合字母键字符串。

标签: python string encryption key phrase


【解决方案1】:

有多种方法可以做到这一点。您需要处理密码短语中的所有重复字母,尽管这对于密码短语“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)

输出

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)不变地传递非字母字符。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2015-03-12
    • 2022-10-22
    • 2011-06-17
    • 1970-01-01
    • 2012-06-14
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多