【问题标题】:Javascript: Generate random integer of n bitsJavascript:生成n位的随机整数
【发布时间】:2020-10-01 09:18:55
【问题描述】:

我想为 DH 私钥生成一个 512 位整数。我环顾四周,但找不到任何显示生成特定长度的随机 int 的 javascript 资源

【问题讨论】:

标签: javascript random cryptography


【解决方案1】:

如何生成 16 个随机 32UInt,如图 here。从理论上讲,如果您希望将所有数字放在一起,则可以执行以下操作:

randomNumber = generatedArray.map((partialResult, value) => (partialResult << 32) + value));

但是,请注意 javascript MAX_SAFE_INTEGER 只有 53 位长。

编辑

正如@SamMason 评论的那样,它应该是reduce 而不是map。此外,由于位移运算符仅定义为适用于 32 位值,我们可以乘以 2^32

randomNumber = generatedArray.reduce(
    (partialResult, value) => partialResult * Math.pow(2,32) + value)
);

【讨论】:

  • 这不是reduce而不是map吗?即使这样它也没有做正确的事情,中间值溢出并环绕,因为移位运算符被定义为在 32 位值上工作
  • @SamMason 没错,应该是reduce。谢谢你,我不知道 32 位限制。我想我可以乘以2^16
  • 鉴于您最初谈论的是 32 位 uint,那不是 2**32 吗? javascript也没有任意精度数字,所以这比Math.random() * 2**512好一点(只有“一点”,因为你可能会得到一个CSPRNG)但是为什么要生成512位来扔掉除了top ~54
  • 是的,应该是2**32,谢谢。我只是指出这种方法在理论上可行。但是,正如您提到的,由于 Javascript 的精度限制,实际上只能使用 ~54 位。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2018-10-09
相关资源
最近更新 更多