在我的vigenere密码代码中,我使用itertools中的cycle来遍历关键字。这很好,直到我在消息中使用空格,因为它加密了空间,因此使加密错误。这是密码。在
message = input('enter message: ')
keyword = input('enter keyword: ')
def chr_to_int(char):
return 0 if char == 'z' else ord(char)-96
def int_to_chr(integer):
return 'z' if integer == 0 else chr(integer+96)
def add_chars(a, b):
return int_to_chr(( chr_to_int(a) + chr_to_int(b)) % 26 )
def vigenere(message, keyword):
keystream = cycle(keyword)
new = ''
for msg, key in zip(message, keystream):
if msg == ' ':
new += ' '
else:
new += add_chars(msg, key)
return new
new = vigenere(message, keyword)
print('your encrypted message is: ',new)
我认为解决这个问题的方法是在相同长度的空格中循环,这样它就可以像没有空格一样继续到下一个字母。我不知道该怎么做。在
示例:
消息:维格纳密码关键字:qwerty
加密mesasge(它应该是什么):mflahdib hajgvo
由于
cycle
返回iterable,因此可以使用next
而不是zip,这样它只在被要求时调用下一个字符:编辑:根据操作请求,使用zip和offset变量
^{pr2}$相关问题 更多 >
编程相关推荐