javascript使用dh加密算法生成共享秘钥
js示例代码
function generatePrivateKey(length = 64) {
const bytes = new Uint8Array(length);
window.crypto.getRandomValues(bytes);
return BigInt(`0x${bytes.reduce((data, byte) => data + ('00' + byte.toString(16)).slice(-2), '')}`);
}
const p = generatePrivateKey(128); // 一个常见的2048位素数
const g = 2n; // 通常的生成元
// 模幂运算
function modPow(base, exponent, modulus) {
let result = BigInt(1);
base = base % modulus;
while (exponent > BigInt(0)) {
if (exponent % BigInt(2) === BigInt(1))
result = (result * base) % modulus;
exponent = BigInt(Math.floor(Number(exponent / BigInt(2))));
base = (base * base) % modulus;
}
return result;
}
// 第一方的私钥
const a = generatePrivateKey();
const A = modPow(g, a, p); // 第一方的公钥
// 第二方的私钥
const b = generatePrivateKey();
const B = modPow(g, b, p); // 第二方的公钥
// 第一方计算共享密钥
const sharedSecretA = modPow(B, a, p);
// 第二方计算共享密钥
const sharedSecretB = modPow(A, b, p);
console.log("Shared Secret (Party A): ", sharedSecretA.toString(10));
console.log("Shared Secret (Party B): ", sharedSecretB.toString(10));
评论区
请写下您的评论...
猜你喜欢
ofc
对称加密和非对称加密的区别
official
763
一、对称加密 对称加密(SymmetricCryptography),又称私钥加密。 在对称加密算法中,加密和解密使用的是同一把钥匙,即:使用相同的密匙对同一密码进行加密和解密;加密过程如下:加
blog
linux系统配置SSH免密钥登录
linux
1127
-keygen-trsa过程中需要输入内容的地方直接按回车即可。查看生成的秘钥[root@localhost.ssh]#ll-a总用量12drwx------.2rootroot5712月2212:25.dr-xr
blog
使用openssl生成crt证书
搜索
843
OpenSSL3.1.014Mar2023(Library:OpenSSL3.1.014Mar2023)
创建证书密钥文件server.keyD:\tmp\sslopensslgenrsa-des3
数据结构,算法基础
905
做生成树。当连接顶点之间的图有权重时,权重之和最小的树结构为最小生成树!
在实际中,这种算法的应用非常广泛,比如我们需要在n个城市铺设电缆,则需要n-1条通信线路,那么我们如何铺设可以使得电缆最短呢
数据结构与算法
1724
最小生成树算法和其应用什么是最小生成树:一个有n个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或
blog
java使用欧几里得算法计算比例的方法
数据结构与算法
1687
java使用欧几里得算法计算比例的方法 publicstaticvoidmain(String[]args){ System.out.println(bili(2,6
weblog
1772
javaMD5加密和和javascript加密该加密工具没有加盐java加密工具importjava.security.MessageDigest
算法基础
1349
";
messageDogInfo{
stringname=1;
int32age=2;
}编译生成访问类文件:命令:protoc--js_out=import_style=commonjs,binary:.Do
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。