【发布时间】:2020-10-01 09:18:55
【问题描述】:
我想为 DH 私钥生成一个 512 位整数。我环顾四周,但找不到任何显示生成特定长度的随机 int 的 javascript 资源
【问题讨论】:
-
逐字节(或逐字)生成 512 位并将它们打包到 BigInt 中
标签: javascript random cryptography
我想为 DH 私钥生成一个 512 位整数。我环顾四周,但找不到任何显示生成特定长度的随机 int 的 javascript 资源
【问题讨论】:
标签: javascript random cryptography
如何生成 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 位值上工作
reduce。谢谢你,我不知道 32 位限制。我想我可以乘以2^16。
Math.random() * 2**512好一点(只有“一点”,因为你可能会得到一个CSPRNG)但是为什么要生成512位来扔掉除了top ~54