解密算法问题

时间:2014-07-02 07:45:44

标签: python algorithm encryption

我在尝试反转加密算法时遇到了一些麻烦。该算法是凯撒密码的变体,其工作原理如下:

(V1 + V2 + D) % 26 + 1

其中V1是要加密的短语的字母映射到相关的数字(A = 1等),V2是用户选择密钥的字母(长度与短语),再次映射到相关的数字,D是一个选定的位移值,范围从1到10.

我遇到的问题是试图扭转这种局面。我试过简单地反转算法:

(V1 - V2 - D) % 26 - 1

但由于涉及模数,这显然是失败的。我也尝试过:

(V1 - V2 - D + 26) % 26

根据here的建议,但这又失败了。如果有人能够向我展示解决方案,或者至少指出我正确的方向,那将是非常有帮助的。

1 个答案:

答案 0 :(得分:3)

(v1 - v2 - d + 50) % 26 + 1

相当于

(v1 - v2 - d - 1 - 1 + 26 + 26) % 26 + 1

其中一个- 1是为了补偿加密中的+ 1。另一个- 1和模数外的匹配+ 1是将0包裹回26,而其余部分保持不变。让26两次的原因仅仅是因为26 v1 - v2 - d - 1 - 1不够,因为1 - 26 - 10 - 1 - 1可以归结为-37import itertools def encode(v1, v2, d): return (v1 + v2 + d) % 26 + 1 def decode(v1, v2, d): return (v1 - v2 - d + 50) % 26 + 1 all_combinations = map(tuple, itertools.product( range(1, 27), range(1, 27), range(1, 11))) all(decode(encode(v1, v2, d), v2, d) == v1 for v1, v2, d in all_combinations) # => True

{{1}}