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)