为了娱乐,我尝试在字符串上运行凯撒密码,其中每个字符都被字符串中的前一个字符移位。初始字符显然不会移动,而是用于移动第二个字符,第二个字符用作第三个字符的种子,等等。
编码似乎按预期方式工作;另一方面解码...
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
很显然,我希望amqbp
是ashop
。将-97左右移动不会有帮助(甚至不确定为什么会这样做)。
我在这里想念什么?
答案 0 :(得分:1)
您的编码循环似乎不正确。我希望S偏移A即可得到T。但是您的输出是L。也许尝试对za
进行编码,这应该导致za
来查看您可能在哪里出错。猜测似乎是问题在于您使用的是字符代码的模数,而不是字母中的字符索引。例如。对于a
,您最终会做97 % 26
而不是0 % 26
。