如何生成随机素数?
How to generate random prime number?
我目前正在从事一个涉及密码学的 JavaScript 团队项目。
我希望我的程序尽可能安全,如果可能的话达到行业级安全,因此我一直在寻找社区认可的随机大质数生成算法的实现。
我探索了 Node.js 加密,但我没有找到一个简单的函数 returns 一个随机的大概率素数。
如何使用 Node.js 加密来解决这个问题?
createDiffieHellman 来自 Node 的加密模块可以做到这一点:
const crypto = require('crypto');
let DH = crypto.createDiffieHellman(16); // bit length
let prime = DH.getPrime('hex');
let dec = parseInt(prime, 16);
console.log('prime:', prime); // prime: c803
console.log('dec:', dec); // dec: 51203
从 v15.8.0 开始 Node.js 内置 crypto
模块提供 generatePrime and generatePrimeSync 方法。
例如生成16位质数使用:
const crypto = require('crypto');
let prime = crypto.generatePrimeSync(16, {bigint: true}); // 49597n
由于计算大素数需要时间,因此还有一个带回调的异步选项:
const crypto = require('crypto');
crypto.generatePrime(16, {bigint: true}, (err, prime) => {
console.log(prime); // 60757n
});
注意:bigint
选项用于 return 一个 bigint
而不是 ArrayBuffer
我目前正在从事一个涉及密码学的 JavaScript 团队项目。
我希望我的程序尽可能安全,如果可能的话达到行业级安全,因此我一直在寻找社区认可的随机大质数生成算法的实现。
我探索了 Node.js 加密,但我没有找到一个简单的函数 returns 一个随机的大概率素数。
如何使用 Node.js 加密来解决这个问题?
createDiffieHellman 来自 Node 的加密模块可以做到这一点:
const crypto = require('crypto');
let DH = crypto.createDiffieHellman(16); // bit length
let prime = DH.getPrime('hex');
let dec = parseInt(prime, 16);
console.log('prime:', prime); // prime: c803
console.log('dec:', dec); // dec: 51203
从 v15.8.0 开始 Node.js 内置 crypto
模块提供 generatePrime and generatePrimeSync 方法。
例如生成16位质数使用:
const crypto = require('crypto');
let prime = crypto.generatePrimeSync(16, {bigint: true}); // 49597n
由于计算大素数需要时间,因此还有一个带回调的异步选项:
const crypto = require('crypto');
crypto.generatePrime(16, {bigint: true}, (err, prime) => {
console.log(prime); // 60757n
});
注意:bigint
选项用于 return 一个 bigint
而不是 ArrayBuffer