Python pow函数不能为大数值返回正确的值?

juzqafwq  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(95)

我试图使用python中的RSA算法生成的值,通过使用python的pow函数和3个参数,但它似乎没有返回大数字的正确值。例如,如果我试着用一个小数字来做,比如42:

n=10002668571558232229090995822943
e=65537
d=3132501789258907532830941079073

number=pow(42,e,n)
print(number)
number=pow(number,d,n)
print(number)

输出为:
8057039574873290190626687506928
42
但是当我用一个大的数字来试的时候:

n=10002668571558232229090995822943
e=65537
d=3132501789258907532830941079073

number=pow(1691472818829646266231812146685797,e,n)
print(number)
number=pow(number,d,n)
print(number)

我得到这个输出:
4303635339538819794578326868533
1021830236305019515433852608430
我期待第二个数字是1691472818829646266231812146685797。
我试着在网上寻找解决方案,但我似乎找不到解决方案。如果你能帮忙的话,我将不胜感激。

qzwqbdag

qzwqbdag1#

正如@总统评论的那样,你得到了正确的结果:
请参阅文件:
https://docs.python.org/3/library/functions.html#pow

n=10002668571558232229090995822943
e=65537
d=3132501789258907532830941079073

number = pow(1691472818829646266231812146685797,e,n)

print(number)

#output
4303635339538819794578326868533

将基地返回到电源exp;如果mod存在,则将base返回到power exp,modulo mod(比power(base,exp)% mod更有效地计算)。双参数形式pow(base,exp)等价于使用幂运算符:基础**实验
另外,我手动做了,

m = 1691472818829646266231812146685797 ** e    #this will take some time depending upon your machine

print(m % n)

#output

4303635339538819794578326868533

编辑:

请看这篇文章:
https://en.wikipedia.org/wiki/RSA_(cryptosystem)#Encryption

只有当你的数字小于n时才有效

例如

n=10002668571558232229090995822943
e=65537
d=3132501789258907532830941079073

number=pow(42,e,n)
print(number)
number=pow(number,d,n)
print(number)

#output (you get 42 back in the output)

8057039574873290190626687506928
42

因为:

42 < 10002668571558232229090995822943

现在,让我们来看下一个例子:

n=10002668571558232229090995822943
e=65537
d=3132501789258907532830941079073

number=pow(1691472818829646266231812146685797,e,n)
print(number)
number=pow(number,d,n)
print(number)

#output (you don't get 1691472818829646266231812146685797 back in the output)

4303635339538819794578326868533
1021830236305019515433852608430

因为:

1691472818829646266231812146685797 > 10002668571558232229090995822943

相关问题