String Index超出范围,Vigenere Cipher

时间:2015-09-23 23:13:30

标签: python vigenere

我正在努力实现Vigenere Cipher。我收到了错误:

  

IndexError:字符串超出范围

import sys

# Get the message and key 
message = (sys.argv[1]).lower()
key = (sys.argv[2]).lower()

# Open file
f = open('Cipher.txt', 'w')

for i in range(len(message)):
    if i > len(key):
        j = i % len(key)
        f.write(str(ord(message[i]) + ord(key[j]) % 26 + ord('a')))
    else:
        f.write(str(ord(message[i]) + ord(key[i]) % 26 + ord('a')))
f.close()

我在f.write(str(ord(message[i]) + ord(key[i]) % 26 + ord('a')))之后就开始了。我知道我的key可能比message的长度短,这就是我在其前面检查的原因。例如,如果我的密钥为test并且我已达到第5个字符,那么我将完全回到t中的test

1 个答案:

答案 0 :(得分:1)

如果i,则返回的值为 if i > len(key): j = i % len(key) f.write(str(ord(message[i]) + ord(key[j]) % 26 + ord('a'))) else: f.write(str(ord(message[i]) + ord(key[i]) % 26 + ord('a')))

替换

a = ord('a')
  ...
    j = i % (len(key) - 1)
    f.write(str((ord(message[i])-a + ord(key[j])-a) % 26 + a))

使用:

{{1}}