Python 解密算法的问题

Python 解密算法的问题,python,algorithm,encryption,Python,Algorithm,Encryption,我在尝试反转加密算法时遇到了一些问题。该算法是Caesar密码的变体,其工作原理如下: (V1 + V2 + D) % 26 + 1 其中,V1是映射到相关数字(A=1等)的待加密短语的字母,V2是用户选择的密钥的字母(与短语长度相同),再次映射到相关数字,D是选择的置换值,范围为1-10 我面临的问题是试图扭转这种局面。我尝试过简单地反转算法: (V1 - V2 - D) % 26 - 1 但这显然是失败的,因为涉及到模量。我还尝试: (V1 - V2 - D + 26) % 26 在他

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

(V1 + V2 + D) % 26 + 1
其中,
V1
是映射到相关数字(A=1等)的待加密短语的字母,
V2
是用户选择的密钥的字母(与短语长度相同),再次映射到相关数字,
D
是选择的置换值,范围为1-10

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

(V1 - V2 - D) % 26 - 1
但这显然是失败的,因为涉及到模量。我还尝试:

(V1 - V2 - D + 26) % 26
在他的建议下,这又失败了。如果有人能告诉我解决这个问题的方法,或者至少给我指出正确的方向,那将是非常有帮助的

(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
,或者
-37

import 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
这相当于

(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
,或者
-37

import 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
这相当于

(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
,或者
-37

import 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
这相当于

(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
,或者
-37

import 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

你需要将其视为一个等式,你不能简单地切换到-并希望得到最好的结果。你需要将其视为一个等式,你不能简单地切换到-并希望得到最好的结果。你需要将其视为一个等式,你不能简单地切换到-并希望得到最好的结果。你需要将其视为一个等式,你不能简单地将+切换到-并期待最好的结果。谢谢你的回答,但我无法让它工作。当我尝试用V1和V2作为1(A)时,加密是7,这是G。当我使用该算法解密时,我得到了21,这是U。你能再检查一遍吗?抱歉打扰您。我假设您的
d
当时是
4
(唯一满足
7
结果的
d
encode(1,1,4)=7
)。然后,
解码(7,1,4)==1
。解码时,您的
V1
应该是加密字符;运行
decode(1,1,4)
做了错误的事情。谢谢你的回答,但我无法让它工作。当我尝试用V1和V2作为1(A)时,加密是7,这是G。当我使用该算法解密时,我得到了21,这是U。你能再检查一遍吗?抱歉打扰您。我假设您的
d
当时是
4
(唯一满足
7
结果的
d
encode(1,1,4)=7
)。然后,
解码(7,1,4)==1
。解码时,您的
V1
应该是加密字符;运行
decode(1,1,4)
做了错误的事情。谢谢你的回答,但我无法让它工作。当我尝试用V1和V2作为1(A)时,加密是7,这是G。当我使用该算法解密时,我得到了21,这是U。你能再检查一遍吗?抱歉打扰您。我假设您的
d
当时是
4
(唯一满足
7
结果的
d
encode(1,1,4)=7
)。然后,
解码(7,1,4)==1
。解码时,您的
V1
应该是加密字符;运行
decode(1,1,4)
做了错误的事情。谢谢你的回答,但我无法让它工作。当我尝试用V1和V2作为1(A)时,加密是7,这是G。当我使用该算法解密时,我得到了21,这是U。你能再检查一遍吗?抱歉打扰您。我假设您的
d
当时是
4
(唯一满足
7
结果的
d
encode(1,1,4)=7
)。然后,
解码(7,1,4)==1
。解码时,您的
V1
应该是加密字符;运行
decode(1,1,4)
会做错误的事情。