【问题标题】:How to generate random prime number?如何生成随机素数?
【发布时间】:2020-07-20 21:43:20
【问题描述】:

我目前正在从事一个涉及密码学的 JavaScript 团队项目。

我希望我的程序尽可能安全,如果可能的话,达到行业级安全,因此我一直在寻找社区认可的随机大素数生成算法的实现。

我探索了 Node.js Crypto,但没有找到一个简单的函数来返回一个随机的大可能素数。

如何使用 Node.js Crypto 来解决这个问题?

【问题讨论】:

  • 无法评论它的加密安全性,但如果您想保留在现有的加密库中(好主意),您可以生成一个特定长度的 diffie-hellman 对象,然后用 @ 提取它的质数987654322@.

标签: javascript node.js random primes node-crypto


【解决方案1】:

来自 Node 的加密模块的createDiffieHellman 可以做到这一点:

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

【讨论】:

    【解决方案2】:

    从 v15.8.0 开始,Node.js 内置 crypto 模块提供了 generatePrimegeneratePrimeSync 方法。

    例如,要生成 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 选项用于返回 bigint 而不是 ArrayBuffer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2020-08-06
      相关资源
      最近更新 更多