python中pow_如何在python中找到pow(a,b,c)的反向?

尽管评论中有这样的说法,但这不是离散对数问题。这更类似于RSA problem,其中{}是两个大素数的乘积,b是加密指数,a是未知明文。我总是喜欢把x作为你想要求解的未知变量,所以你有y=xbmod c,其中y,b,和{}都是已知的,你要求解x。求解它涉及与RSA相同的基本数论,即必须计算z=b-1modλ(c),然后通过x=yzmod c求解x。λ是Carmichael's lambda function,但也可以使用Euler的phi(toclient)函数。我们将原问题简化为求λ(c)的逆模。如果c易于分解,或者我们已经知道c的因式分解,那么这很容易实现,否则就很难实现。如果c很小,那么暴力是一种可以接受的技术,您可以忽略所有复杂的数学。在

下面是一些显示这些步骤的代码:import functools

import math

def egcd(a, b):

"""Extended gcd of a and b. Returns (d, x, y) such that

d = a*x + b*y where d is the greatest common divisor of a and b."""

x0, x1, y0, y1 = 1, 0, 0, 1

while b != 0:

q, a, b = a // b, b, a % b

x0, x1 = x1, x0 - q * x1

y0, y1 = y1, y0 - q * y1

return a, x0, y0

def inverse(a, n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值