Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python程序不处理Diffie-Hellman实现的长整数_Python_Largenumber_Diffie Hellman - Fatal编程技术网

Python程序不处理Diffie-Hellman实现的长整数

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)

我正在创建一个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) % 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
的中间值。这是有效的。非常感谢。