javascript使用dh加密算法生成共享秘钥

硅谷探秘者 Md javascript,加密算法 139 0 0

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));


评论区
请写下您的评论...
暂无评论...
猜你喜欢
official 763 一、对称  对称(SymmetricCryptography),又称私。  在对称中,和解使的是同一把匙,即:使相同的匙对同一码进行和解过程如下:
linux 1127 -keygen-trsa过程中需要输入内容的地方直接按回车即可。查看[root@localhost.ssh]#ll-a总量12drwx------.2rootroot5712月2212:25.dr-xr
搜索 843 OpenSSL3.1.014Mar2023(Library:OpenSSL3.1.014Mar2023) 创建证书文件server.keyD:\tmp\sslopensslgenrsa-des3
数据结构,算法基础 905 树。当连接顶点之间的图有权重时,权重之和最小的树结构为最小树!   在实际中,这种的应非常广泛,比如我们需要在n个城市铺设电缆,则需要n-1条通信线路,那么我们如何铺设可以使得电缆最短呢
数据结构与算法 1724 最小和其应什么是最小树:一个有n个结点的连通图的树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边。最小树可以kruskal(克鲁斯卡尔)
数据结构与算法 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 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。