简体   繁体   English

如何生成随机素数?

[英]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模块提供generatePrimegeneratePrimeSync方法。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM