python - 字符串索引超出范围,维吉尼亚密码

标签 python vigenere

我正在致力于实现维吉尼亚密码。我收到错误:

IndexError: string out of range

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的长度短,这就是为什么我在它前面放了一个支票。例如,如果我的 key 是 test 并且我已经到达了第 5 个字符,我将绕一圈回到 test 中的 t

最佳答案

如果i == len(key),返回的值为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))

关于python - 字符串索引超出范围,维吉尼亚密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32750960/

相关文章:

c - Vigenere CS50 - 需要帮助循环浏览字母

python - 如何复制变量的内容?

python - Vigenère Cipher 函数实现

algorithm - 我的对称加密算法安全吗?

python - 使 Vigenére 加密/解密跳过空格

c++ - 绘制贝塞尔曲线的各个部分

python - 如何停止/终止Python脚本的运行? (再次)

Python 函数引用

python - C 到 Python 接口(interface) - 尝试传递结构