1、DH算法是一种密钥交换协议,它可让双方在不泄漏密钥的状况下协商出一个密钥来。html
DH算法基于数学原理,好比小明和小红想要协商一个密钥,能够这么作:算法
1. 小明先选一个素数和一个底数,例如,素数p=23,底数g=5(底数能够任选),再选择一个秘密整数a=6,计算A=(g^a mod p)=8,而后大声告诉小红:p=23,g=5,A=8; 2. 小红收到小明发来的p,g,A后,也选一个秘密整数b=15,而后计算B=(g^b mod p)=19,并大声告诉小明:B=19; 3. 小明本身计算出s=(B^a mod p)=2,小红也本身计算出s=(A^b mod p)=2,所以,最终协商的密钥s为2。
在这个过程当中,密钥2并非小明告诉小红的,也不是小红告诉小明的,而是双方协商计算出来的。加密
第三方只能知道p=23,g=5,A=8,B=19,因为不知道双方选的秘密整数a=6和b=15,所以没法计算出密钥2。spa
2、数学证实:代理
对于小明的密钥计算过程有: s1 = (g^b mod p)^a mod p = g^(b*a) mod p 对于小红的密钥计算过程有:: s2 = (g^a mod p)^b mod p = g^(a*b) mod p 根据乘法交换律,s1 == s2
3、神奇的数学,完美的加密算法?code
开始看到这个过程的时候,我着实小激动了一下,选择合适的素数,这个密钥的协商简直是”无懈可击“,怎么应用不怎么普遍呢?htm
查了一下资料,好吧,这个若是用于实战的话,一个”代理“就轻易的使这种加密彻底无效。blog
因此如今用的比较普遍的加密算法是RSA(非对称加密算法)文档
参考文档:get
https://www.liaoxuefeng.com/wiki/1022910821149312/1023025778520640