我试图使用加密安全的熵源来对阵列进行洗牌.
我发现了一个类似的问题,关于在这里改组数组如何随机化(shuffle)一个JavaScript数组?.然而,几乎所有解决方案都使用Math.random,这是不安全的.不幸的是,我没有在这个问题上发表评论/发帖的声誉.
这是我提出的解决方案,它使用Durstenfeld shuffling与CSPRNG配对,在给定范围内生成随机整数(由random-number-csprng lib提供).
const randomNumber = require("random-number-csprng");
async function secureShuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = await randomNumber(0, i);
const temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
这种实施是否正确且无偏见?
笔记: