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

本文介绍了如何使用JavaScript实现Diffie-Hellman密钥交换算法,重点在于解决JavaScript中大数计算的问题,借助math.js库完成。通过算法,生成了50对共享密钥并进行比对。

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值