Python程序无法为Diffie-Hellman实现处理长整数

问题描述

我正在创建一个实现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 (将#修改为@)