python 中 Float 和 Integer 的不同可用大小

Different available sizes for Float and Integer in python

我读过一些类似的帖子,您建议的解决方案是 Decimal module。但我的问题不是我的代码不能计算它。我的意思是一次可以,一次不能。我对 RSA 和学习加密和解密私钥感兴趣有简单的代码:

p=53 #secret
q=59 #secret
n=p*q
k=2 #secret
print(n)
PHI=(p-1)*(q-1) #secret
print(PHI) #secret
#choose a small public exponent, "e" must be odd, have no common divisors with phi (n)
e=3
d=(k*PHI+1)/3 #secret
print(d) #secret
# secret message is 89
c=(89**e)%n
print(c)
x=(c**d)
print(x)
x=x%n
print(x)
"""x=1394**2011
print(x)"""

计数 ((89^3) mod n) 没有问题,最后一个等式也没有问题(作为评论)1394^2011= 我有 6324 位数字,但是当我尝试使用 x=(c^d) mod 我有 :

Traceback (most recent call last):
  File "RSA.py", line 77, in <module>
    x=(c**d)
OverflowError: (34, 'Numerical result out of range')

e 是一个 int,因此 89**e 可以任意大(尽管我会使用 pow(89, e, n) 这样您就不必计算大中间值 89**e 先)。

然而,

d 是一个 floatc**d 也是一个浮点数。 A float 不能任意变大,因此会出现错误。

因为 d 应该是 int,所以使用 floored 除法。

d = (k*PHI + 1) // 3