对于生成 public 和私钥对的函数,while 循环永远不会变为假
while loop never becoming false for function that generates a public and private key pair
我正在 python 中编写程序,生成 public 和私钥对。到目前为止我的代码看起来像这样
def gcd(a,b):
while b != 0:
a, b = b, a % b
return(a)
pass
def inverse(a, b): # use extended euclidean algorithm to find inverse
x1, x2, x3 = 1, 0, a
y1, y2, y3 = 0, 1, b
while y3 != 0:
d = x3 // y3
y1, y2, y3, x1, x2, x3 = (x1 - d * y1), (x2 - d * y2), (x3 - d * y3), y1, y2, y3
return x1 % d
pass
def generate_key(a, b):
n = a * b
p = (a-1) * (b-1)
e = random.randrange(1,p)
g = gcd(e, p)
while g != 1:
e = randrange(1,p)
g = gcd(e,p)
d=inverse(e,p)
return ((e,n), (d,n))
pass
但是当我 运行 测试代码时,它永远不会完成并继续 运行ning 直到我手动停止它。知道为什么会这样吗?
您的代码的问题是 gcd 的实现,return 不应该在 while 内,因为它只会 运行 一次并且 return,您必须这样做像这样:
def gcd(a,b):
while b != 0:
a, b = b, a % b
return(a)
因为你没有提供反函数,不知道还有没有问题
我正在 python 中编写程序,生成 public 和私钥对。到目前为止我的代码看起来像这样
def gcd(a,b):
while b != 0:
a, b = b, a % b
return(a)
pass
def inverse(a, b): # use extended euclidean algorithm to find inverse
x1, x2, x3 = 1, 0, a
y1, y2, y3 = 0, 1, b
while y3 != 0:
d = x3 // y3
y1, y2, y3, x1, x2, x3 = (x1 - d * y1), (x2 - d * y2), (x3 - d * y3), y1, y2, y3
return x1 % d
pass
def generate_key(a, b):
n = a * b
p = (a-1) * (b-1)
e = random.randrange(1,p)
g = gcd(e, p)
while g != 1:
e = randrange(1,p)
g = gcd(e,p)
d=inverse(e,p)
return ((e,n), (d,n))
pass
但是当我 运行 测试代码时,它永远不会完成并继续 运行ning 直到我手动停止它。知道为什么会这样吗?
您的代码的问题是 gcd 的实现,return 不应该在 while 内,因为它只会 运行 一次并且 return,您必须这样做像这样:
def gcd(a,b):
while b != 0:
a, b = b, a % b
return(a)
因为你没有提供反函数,不知道还有没有问题