我正在尝试使用mod 37在Python中编写一个Vigenere Cipher程序。我需要帮助找出问题所在。
alphabet= "abcdefghijklmnopqrstuvwxyz0123456789 "
def Let2Ind(x):
return(ord(x)-ord("a"))
def Ind2Let(n):
return(alphabet[n])
def encVigenere(key, plaintext):
ciphertext=""
L=len(key)
for i in range(len(plaintext)):
A=Let2Ind(key[i%L])
B=Let2Ind(plaintext[i])
C=(A+B)%37
D=Ind2Let(C)
ciphertext= ciphertext+D
return(ciphertext)
def decVigenere(key, ciphertext):
plaintext=""
L=len(key)
for i in range(len(ciphertext)):
E=Let2Ind(key[i%L])
F=Let2Ind(ciphertext[i])
G=(F-E)%37
H=Ind2Let(G)
plaintext= plaintext+H
return(plaintext)
答案 0 :(得分:1)
一个问题是您的Let2Ind()
代码无法正确处理数字或空格。它将返回数字的负数(-49或0
左右)和空格(-65)。
您可能需要以下内容:
def Let2Ind(x):
return alphabet.index(x)