我将如何在 python 中实现 vigenere 密码

Posted

技术标签:

【中文标题】我将如何在 python 中实现 vigenere 密码【英文标题】:How would I implement the vigenere cipher in python 【发布时间】:2016-02-11 18:01:03 【问题描述】:

过去我的任务是创建一个凯撒密码,现在我正在尝试在 python 中实现 viginere 密码。我想知道我将如何去做这件事。我有一个基本想法,即使用来自用户的变量作为“纯文本”,将字母表作为自己的变量,然后添加它们以创建自己的变量,并在字母表和代码行中使用这些索引:

cipher += alphabet[(alphabet.index(c)+key) % (len(alphabet))

这可能是错误的。

【问题讨论】:

Hmmmm.... 一些随机输入 (1) 什么是 viginere 密码? (2) 你忘了] (3) 你需要用%s替换key 如果你遵循上面的建议 2 应该可以工作 【参考方案1】:

以下来自Rosetta Code的网站:

from itertools import starmap, cycle

def encrypt(message, key):

    # convert to uppercase.
    # strip out non-alpha characters.
    message = filter(lambda _: _.isalpha(), message.upper())

    # single letter encrpytion.
    def enc(c,k): return chr(((ord(k) + ord(c)) % 26) + ord('A'))

    return "".join(starmap(enc, zip(message, cycle(key))))

def decrypt(message, key):

    # single letter decryption.
    def dec(c,k): return chr(((ord(c) - ord(k)) % 26) + ord('A'))

    return "".join(starmap(dec, zip(message, cycle(key))))

包括一个说明如何使用代码的示例:

text = "Beware the Jabberwock, my son! The jaws that bite, the claws that catch!"
key = "VIGENERECIPHER"

encr = encrypt(text, key)
decr = decrypt(encr, key)

print text
print encr
print decr

最后,我们可以看到运行代码的输出应该是什么:

Beware the Jabberwock, my son! The jaws that bite, the claws that catch!
WMCEEIKLGRPIFVMEUGXQPWQVIOIAVEYXUEKFKBTALVXTGAFXYEVKPAGY
BEWARETHEJABBERWOCKMYSONTHEJAWSTHATBITETHECLAWSTHATCATCH

【讨论】:

以上是关于我将如何在 python 中实现 vigenere 密码的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中实现这五类强大的概率分布

如何在Python中实现这五类强大的概率分布

我将如何在 SSIS 数据流中实现此查询?

我将如何通过仿射变换在opencv中实现这一点?

如何在交叉验证和 GridSearchCV 中实现 SMOTE

我将如何在播放框架 2.4.3 (Scala) 中实现拦截器/过滤器