python实现DH算法
DH算法是非对称密钥算法,这个算法只能用于密钥的交换,不能用于密钥的加解密;它能够在双方不传递私钥的情况下,获得一个共享密钥,且第三方就算截取数据包,也很难破解出共享密钥,这涉及离散对数问题,请读者自行百度。
代码如下:
# 初始化数据
p = 19
a = 2
XA = 5
XB = 7
# 该函数是用来求模的,函数功能是a的x次方对p求模,因为当x很大的时候
# 可能会造成内存溢出问题,所以每次选取一个步长step,求a的step次方对p求模,所有的step总和等于x
def calcu_model(a, x, p, step):
y = 1
while(x>0):
# 当x < step时候,说明已经到了最后一次循环过程了,所有要在此处将step修改为剩余值
if x < step:
temp = pow(a, x, p)
y = y * temp
y = y % p
break
y = y * pow(a, step, p)
y = y % p
x = x - step
return y
def calcu_dh(p, a, XA, XB, step):
"""
:param p: p是一个素数,一般而言P很大
:param a: a是一个任意数
:param XA: XA是A的私钥
:param XB: XB是B的私钥
:param step: 一个步长,任意int值,避免内存溢出
:return: 返回一个元组,格式是(A的公开密钥,B的公开密钥,A和B的共享密钥)
"""
YA = calcu_model(a, XA, p, step)
YB = calcu_model(a, XB, p, step)
print("A用户的公开密钥为:{0}".format(YA))
print("B用户的公开密钥为:{0}".format(YB))
KA = calcu_model(YB, XA, p, step)
KB = calcu_model(YA, XB, p, step)
if KA == KB:
print("共享密钥为{0}".format(KA))
return (YA, YB, KA)
calcu_dh(p, a, XA, XB, 2)

浙公网安备 33010602011771号