gpt4 book ai didi

javascript - 如何使用 randomBytes() 在 node.js 中生成随机 6 位密码

转载 作者:搜寻专家 更新时间:2023-11-01 00:02:40 25 4
gpt4 key购买 nike

我正在尝试在 Node.js 中生成恰好 6 的随机数字,这需要加密安全。这是我的代码:

var crypto = require('crypto');

crypto.randomBytes(2, function(err, buffer) {
console.log(parseInt(buffer.toString('hex'), 16));
});

问题是这样的结果可能是 45 数字,因为我们正在从十六进制转换为十进制。有没有办法保持加密安全函数 randomBytes(),但保证 6 位数的结果?

最佳答案

2 个字节的最大值为 65535,因此如果只使用 2 个字节,您将永远不会得到 6 位数字。

改为使用 3 个字节,然后使用 substr 将其减少为 6 位数字:

var crypto = require('crypto');
crypto.randomBytes(3, function(err, buffer) {
console.log(parseInt(buffer.toString('hex'), 16).toString().substr(0,6));
});

另一个解决方案是执行 randomBytes 直到你得到一个 6 位数的值:

var crypto = require('crypto');
var secureVal = 0;
function generateSecureVal(cb) {
crypto.randomBytes(3, function(err, buffer) {
secureVal = parseInt(buffer.toString('hex'), 16);
if (secureVal > 999999 || secureVal < 100000) {
generateSecureVal(cb);
} else {
cb();
}
});
}

generateSecureVal(function(){
console.log(secureVal);
});

上面的问题是理论上它可能会陷入一个永无止境的循环,而且它很可能会比第一个例子使用更多的 CPU 周期。

关于javascript - 如何使用 randomBytes() 在 node.js 中生成随机 6 位密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com