我想用加密安全的随机数生成器代替Math.random
函数。
生成器的输出必须从0
(包括)到1
(不包括),以与原始Math.random
保持一致,因此可以将其放到任何项目中而不会引起错误
答案 0 :(得分:1)
类似这样的函数可以解决问题:
Math.random = function (inclusive) {
let typedArray = new Uint32Array(1);
let randomNumber = (crypto || msCrypto).getRandomValues(typedArray)[0];
let integerLimit = Math.pow(2, 32); inclusive && (integerLimit -= 1);
return randomNumber / integerLimit;
}
来源:For a more secure implementation...
说明:值randomNumber
是32位整数。 32位整数限制为2^32 - 1
,因此将输出数除以32位整数限制(加1)将得到从0
(含)到1
(独占),就像Math.random
。
inclusive
变量(如果设置为true)将增加输出范围,以包括1
。
编辑1:添加了对IE 11的支持。
编辑2:添加了一个选项,可将1
包括在输出范围内。