Python 3.x python解密代码中pow(a,b,n)函数的逆

Python 3.x python解密代码中pow(a,b,n)函数的逆,python-3.x,encryption,Python 3.x,Encryption,我正在使用已经可用的加密代码编写python解密代码 在加密代码中,我有 pow(b、xyz、abc) 一个数字被加密并传递到数组中 现在在解密时,我需要得到“b”的值(来自上面的pow函数),因为我在数组中有这个值 使用模给出范围内的值,而不是确切的值,这是我的解密逻辑工作所需要的 如何继续 首先将928108726777524737分解为因数。它有两个基本因子,叫做P和Q。 然后您需要找到一个值d,使得d*65539 mod(P-1)(Q-1)==1(使用扩展的欧几里德算法) 一旦你这样做了

我正在使用已经可用的加密代码编写python解密代码

在加密代码中,我有 pow(b、xyz、abc)

一个数字被加密并传递到数组中

现在在解密时,我需要得到“b”的值(来自上面的pow函数),因为我在数组中有这个值

使用模给出范围内的值,而不是确切的值,这是我的解密逻辑工作所需要的


如何继续

首先将928108726777524737分解为因数。它有两个基本因子,叫做P和Q。 然后您需要找到一个值
d
,使得
d*65539 mod(P-1)(Q-1)==1
(使用扩展的欧几里德算法)

一旦你这样做了,然后给出
c=pow(b,65539,928108726777524737)
你可以用
pow(c,d,928108726777524737)

为了给你多一点帮助,
p=948712711
Q=978282167
giving
d=872653594828486879

>>> c = pow(99, 65539, 928108726777524737)
>>> pow(c, 872653594828486879, 928108726777524737)
99
当然,在现实生活中,你会从主要因素开始,使它们比这个大得多,在这种情况下,在不知道因素的情况下逆转这个过程是不切实际的。对于像这样的小值,很容易分解和计算逆

计算
d

def egcd(a, b):
    x,y, u,v = 0,1, 1,0
    while a != 0:
        q, r = b//a, b%a
        m, n = x-u*q, y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
    gcd = b
    return gcd, x, y
首先找出主要因素:

>>> P, Q = 948712711, 978282167
>>> P*Q
928108726777524737
>>> egcd(65539, (P-1)*(Q-1))
(1, -55455130022042981, 3916)
我们需要中间值
x

>>> gcd, x, y = egcd(65539, (P-1)*(Q-1))
但我们必须使其为正,我们可以通过添加
(p-1)*(Q-1)
值:

>>> x + (P-1)*(Q-1)
872653594828486879

你知道对数吗?这个问题实际上是关于数学的,不是python,也不是一般的编程。我投票结束这个问题,因为它是关于数学的,不是编程。好吧,首先你破解RSA加密,然后你就会获利。你可以重写
q,r=b//a,b%a
as
q,r=divmod(b,a)
由于在处理器级别只进行一次整数除法,因此速度更快。现代的处理器在进行整数除法时总是同时计算商和余数。@Aemyl,你真的对它进行了计时并发现它更快了吗?当然,您只有一个除法,但是您还添加了一个全局变量查找
python-m timeit-s“a,b=65529,928108724850529860”“q,r=b//a,b%a”
0.116usec/循环,
python-m timeit-s“a,b=65529,928108724850529860”“q,r=divmod(b,a)”
0.136usec/循环这很有趣。有没有办法消除全局变量查找?编译它会有帮助吗?