从前一个字符(转换后的字符)播种的凯撒密码

时间:2018-07-08 12:14:14

标签: python caesar-cipher

为了娱乐,我尝试在字符串上运行凯撒密码,其中每个字符都被字符串中的前一个字符移位。初始字符显然不会移动,而是用于移动第二个字符,第二个字符用作第三个字符的种子,等等。

编码似乎按预期方式工作;另一方面解码...

key = "a"
word = key + "shop"

print(word)

coded = ""
for i, val in enumerate(word[1:]):
    coded += (chr(((ord(word[i]) + ord(val) - 97) % 26) + 97))

print(key + coded)
encoded = key + coded

decoded = ""
for i, val in enumerate(encoded[1:]):
    decoded += chr(((ord(encoded[i]) - ord(val) - 97) % 26) + 97)

print(key + decoded)

“我的数学”看起来(天真)正确。编码是否具有我不知道的某些属性,因此不允许反转?

使用上述输入的示例输出:

ashop
alsow
amqbp

很显然,我希望amqbpashop。将-97左右移动不会有帮助(甚至不确定为什么会这样做)。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

您的编码循环似乎不正确。我希望S偏移A即可得到T。但是您的输出是L。也许尝试对za进行编码,这应该导致za来查看您可能在哪里出错。猜测似乎是问题在于您使用的是字符代码的模数,而不是字母中的字符索引。例如。对于a,您最终会做97 % 26而不是0 % 26