Diffie-Hellman密钥交换算法的JavaScript实现

来源:互联网 发布:查看应用程序端口号 编辑:程序博客网 时间:2024/05/22 14:54

Diffie-Hellman密钥交换算法的JavaScript实现

由于js语言本身对数字的支持有限,对大数的计算需要借助math.js实现,算法本身公式较简单,但是结果有趣、应用广阔。这个实现借助DH算法产生50个A和B的共享密钥组成串并比对。

<html><head><script src="https://cdn.bootcss.com/mathjs/3.16.1/math.js"></script><script>math.config({  number: 'BigNumber',  precision: 64});function calc(g,n,p) {    return math.eval(g + "^" + n + " mod " + p).toFixed(); };var q=19,a=15;//两个全局公开的参数,整数a是素数q的一个原根function genAB(){    var aKey="",bKey="";    for(var i=0;i<50;i++){        var aSecretKey = Math.floor(Math.random()*q);//生成用户A的密钥(随机数,小于q)        var APublicKey = calc(a,aSecretKey,q);//计算A的公开密钥        var bSecretKey = Math.floor(Math.random()*q);        var BPublicKey = calc(a,bSecretKey,q);        var aGenKeyCode = calc(BPublicKey,aSecretKey,q);//A产生共享密钥        var bGenKeyCode = calc(APublicKey,bSecretKey,q);        aKey+=aGenKeyCode;bKey+=bGenKeyCode;    }    document.getElementById('aText').innerText = aKey;    document.getElementById('bText').innerText = bKey;    document.getElementById('abResult').innerText = (aKey == bKey);}</script></head><body><div id="aText"></div><div id="bText"></div><div id="abResult"></div><button onclick="genAB()">Gen</button></body></html>
原创粉丝点击