我创建了这个使用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
有人可以解释一下吗?
答案 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]