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)

 

posted @ 2022-03-09 12:43  ROMIN  阅读(667)  评论(0编辑  收藏  举报