PythonVigenère密码不起作用

时间:2017-05-28 02:49:37

标签: python python-2.7 encryption vigenere

我创建了这个使用Vigenère密码加密文本块的代码,出于某种原因,它给了我这个奇怪的输出

override func setNeedsStatusBarAppearanceUpdate() {

}

只给我这个奇怪的输出

import string

original_word = raw_input("what text do you want to encrypt ?")
one_time_pad = raw_input("How do you want to encrypt ?")
word_array = list(original_word)
pad = list(one_time_pad)

i = 0
b = 0
for word in word_array:
    word_array[i]= chr(ord(word) + ord(pad[b]))
    print word_array
    i += 1
    if b == len(one_time_pad):
        b = 0
    else:
        b += 1

cipher_text = "".join(word_array)
print cipher_text

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

因此Vigenère密码是在[A-Z]字母上定义的。您正在使用ord()查找ASCII字符索引。但是,ASCII的定义不仅仅是大写字母。例如:

>>> ord('m')
109
>>> ord('k')
107
>>> 216

第216个字符的值没有用普通的ASCII定义,所以Python使用chr()来获取角色时,你会得到'\xd8',这是Python告诉你它是“只是0xd8 th(216为十六进制)字符“。

相反,您将希望保持在大写字母范围内。我建议做以下事情:

ord1 = string.ascii_uppercase.index(word.upper())
ord2 = string.ascii_uppercase.index(pad[b].upper())
word_array[i] = string.ascii_uppercase[(ord1 + ord2) % 26]