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
是一个 float
,c**d
也是一个浮点数。 A float
不能任意变大,因此会出现错误。
因为 d
应该是 int
,所以使用 floored 除法。
d = (k*PHI + 1) // 3
我读过一些类似的帖子,您建议的解决方案是 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
是一个 float
,c**d
也是一个浮点数。 A float
不能任意变大,因此会出现错误。
因为 d
应该是 int
,所以使用 floored 除法。
d = (k*PHI + 1) // 3