微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。