Python程序不处理Diffie-Hellman实现的长整数
我正在创建一个Python程序来实现Diffie-Hellman计算机安全协议 该程序应该从用户那里获取一个输入p,它的大小相当于一个素数(以位为单位) 我已经对它进行了编码,除了当我输入一个大于50的位时,它不会给我一个输出。我认为这是因为它处理的数据非常大 值g、a和b应该是组{1,2,…,p-1}中的参数值,在这种情况下,它应该是该组中的随机整数 问题代码块Python程序不处理Diffie-Hellman实现的长整数,python,largenumber,diffie-hellman,Python,Largenumber,Diffie Hellman,我正在创建一个Python程序来实现Diffie-Hellman计算机安全协议 该程序应该从用户那里获取一个输入p,它的大小相当于一个素数(以位为单位) 我已经对它进行了编码,除了当我输入一个大于50的位时,它不会给我一个输出。我认为这是因为它处理的数据非常大 值g、a和b应该是组{1,2,…,p-1}中的参数值,在这种情况下,它应该是该组中的随机整数 问题代码块 A = (g ** a) % p B = (g ** b) % p k1 = (B ** a) % p k2 = (A ** b)
A = (g ** a) % p
B = (g ** b) % p
k1 = (B ** a) % p
k2 = (A ** b) % p
整个节目
import random
import math
import sympy
p_bits = input("Enter number of bits of prime number: ")
p_bits = int(p_bits)
p_bitsmax = ((2 ** p_bits) - 1)
p_bitsmin = (2 ** (p_bits - 1))
p = sympy.randprime(p_bitsmin, p_bitsmax)
g = random.randint(1, p-1)
a = random.randint(1, p-1)
b = random.randint(1, p-1)
A = (g ** a) % p
B = (g ** b) % p
k1 = (B ** a) % p
k2 = (A ** b) % p
print("The value of p selected:", p)
print("The value of g selected:", g)
print("The value of a selected by Alice:", a)
print("The value of b selected by Bob:", b)
print("The value of A sent to Bob by Alice:", A)
print("The value of B sent to Alice by Bob:", B)
print("The value of shared key computed by Alice:", k1)
print("The value of shared key computed by Bob:", k2)
print("")
if k1 == k2:
print("The shared keys match.")
else:
print("The shared keys don't match. Something went wrong.")
编辑:
在Jupyter Notebook中测试代码后,我发现它在为g、a和b分配随机值方面没有问题,但它无法计算位大小超过50的a、b和共享密钥。首先弹出的是:
random
模块在加密方面不安全。请参阅文档中的红色警告!您是否能够确定挂起发生的位置?例如,如果您只有在p=sympy.randprime(p_bitsmin,p_bitsmax)
之前的代码,您能得到p
的结果吗?我相信问题在于我将random.randint(1,p-1)分配给g、a和b。当我将范围更改为(1,50)时,我会得到一个结果。但是在这种情况下,在我输入了超过50的位之后,没有结果返回。Python有一个模幂函数,所以您可以编写pow(g,a,p)
,而不是(g**a)%p
。这是非常有效的,因为不需要保留大于p
的中间值。这是有效的。非常感谢。