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

414

被折叠的 条评论
为什么被折叠?



