我正在使用Python和SageMath实现Wiener的指数攻击。
我的代码如下
from sage.all import *
# constants
b = some_very_large_number
n = some_very_large_number
b_over_n = continued_fraction(b/n)
while True:
t_over_a = b_over_n.convergent(i+1)
t = t_over_a.numerator()
a = t_over_a.denominator()
# check if t divides ab-1
if ((t != 0) and (gcd(a*b-1, t)== t)):
print("Found i: ", i)
break
i += 1
我发现循环不会永远结束,并在while循环之前添加了这行代码。
print(b_over_n.convergent(5))
我发现不管怎样b_over_n
总是返回0。我还打印出了type(b_over_n)
,并检查它是'long'
类型的。
我查看了SageMath手册,但还没有发现任何有用的东西。
我是不是做错了什么?
原来我使用的是Python2,其中int/int
将返回int
。因此,在我的情况下,由于b
小于n
,b/n
自动返回0
。