小编Dav*_*vid的帖子

密码安全阵列shuffle

我试图使用加密安全的熵源来对阵列进行洗牌.

我发现了一个类似的问题,关于在这里改组数组如何随机化(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)

这种实施是否正确且无偏见?

笔记:

  • 为了我的目的,该数组最多包含~100个元素
  • 运行nodejs v6.10.3 LTS(已编译)

javascript arrays cryptography shuffle node.js

5
推荐指数
1
解决办法
448
查看次数

标签 统计

arrays ×1

cryptography ×1

javascript ×1

node.js ×1

shuffle ×1