【问题标题】:Vigenere cipher not working维吉尼亚密码不起作用
【发布时间】:2015-11-14 13:24:32
【问题描述】:

所以我的老师创造了这个 vigenere 密码,他说它有效。 但是,在使用在线 vigenere 密码检查其结果后,它似乎没有使用正确的加密结果。

我不知道如何修复它,我想知道是否有人可以指导我找到错误并告诉我如何修复它们。

这里是代码

base = ord("a")
alphabets = 'abcdefghijklmnopqrstuvwxyz'  
keyword = input('What is your keyword')
message = input('What is your message to be coded or encoded?').lower()

expandedKeyword = ""
while len(expandedKeyword) < len(message): 
    for i in keyword:
        if len(expandedKeyword) < len(message): 
            expandedKeyword += i 


cipheredMessage = '' 
indexofKeyword = 0
for i in message:
        if i == ' ':
            cipheredMessage = cipheredMessage + " "
        else:
            shiftedIndex = (ord(i) + ord(expandedKeyword[indexofKeyword])-base) % 26 +base
            cipheredMessage = cipheredMessage + chr(shiftedIndex)
            indexofKeyword = indexofKeyword + 1



print(cipheredMessage)

我理解正在发生的事情的概念,但我似乎无法找出错误。

【问题讨论】:

  • “在使用在线 vigenere 密码检查其结果后,似乎没有正确加密。”嗯不错。你能举例说明你尝试了什么样的输入,你得到了什么输出,你期望得到什么输出?

标签: python encryption vigenere


【解决方案1】:

您对shiftedIndex 的计算有误,您需要将base 减去两次,但您目前只减去一次。示例 -

shiftedIndex = (ord(i) + ord(expandedKeyword[indexofKeyword])-2*base) % 26 +base

这是因为您需要第一次从 ord(i) 中减去 base 以获取 i 的索引(来自 'a'),第二次从 ord(expandedKeyword[indexofKeyword]) 中减去该字符的索引(来自'a')。所以它应该看起来像(为了更好地理解)-

shiftedIndex = ((ord(i) - base) + (ord(expandedKeyword[indexofKeyword])-base)) % 26 + base

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2016-01-18
    • 1970-01-01
    • 2023-03-15
    • 2015-12-01
    相关资源
    最近更新 更多