Vigenere 密码不起作用
Vigenere cipher not working
所以我的老师创造了这个 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)
我理解正在发生的事情的概念,但我似乎无法找出错误。
你计算的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
所以我的老师创造了这个 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)
我理解正在发生的事情的概念,但我似乎无法找出错误。
你计算的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