[英]How to generate random prime number?
I am currently working on a JavaScript team project which involves cryptography.我目前正在从事涉及密码学的 JavaScript 团队项目。
I want my program to be as safe as possible, if possible industry-level safe, and as such I have been searching for community-approved implementations of random big prime number generation algorithms.我希望我的程序尽可能安全,如果可能的话,达到行业级别的安全,因此我一直在寻找社区认可的随机大素数生成算法的实现。
I explored Node.js Crypto, but I did not find a straightforward function that returns a random big probable prime number.我探索了 Node.js Crypto,但我没有找到一个简单的 function 返回一个随机的大可能素数。
How can I use Node.js Crypto to solve this problem?如何使用 Node.js Crypto 来解决这个问题?
Node's crypto module can do this: 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
Since v15.8.0 Node.js built-in crypto
module provides generatePrime and generatePrimeSync methods.自 v15.8.0 Node.js 内置
crypto
模块提供generatePrime和generatePrimeSync方法。
For example, to generate a 16-bit prime use:例如,要生成 16 位素数,请使用:
const crypto = require('crypto');
let prime = crypto.generatePrimeSync(16, {bigint: true}); // 49597n
Since calculating large primes can take time, there is also an asynchronous option with a callback:由于计算大素数可能需要时间,因此还有一个带有回调的异步选项:
const crypto = require('crypto');
crypto.generatePrime(16, {bigint: true}, (err, prime) => {
console.log(prime); // 60757n
});
Note: the bigint
option is used to return a bigint
instead of an ArrayBuffer
注意:
bigint
选项用于返回bigint
而不是ArrayBuffer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.