DH演算法python實現
阿新 • • 發佈:2022-03-09
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)