问题描述
我正在创建一个实现Diffie-Hellman协议以实现计算机安全性的Python程序...
该程序应该从用户处获取单个输入p,即素数的大小(以位为单位)。
我已经对所有代码进行了编码,除了当我输入的位大小超过50时,它不会给我输出。 Im假定它是因为它正在处理的数字非常大。 / p>
值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和共享密钥。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)