Math.random()的加密安全替换方法window.crypto.getRandomValues
Math.random()
返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。
Math.random()函数不是加密安全的随机数生成器。
window.crypto.getRandomValues
Crypto.getRandomValues()
方法让你可以获取符合密码学要求的安全的随机值。传入参数的数组被随机值填充(在加密意义上的随机)。
为了确保足够的性能,不使用真正的随机数生成器,但是它们正在使用具有足够熵值伪随机数生成器。它所使用的 PRNG 的实现与其他不同,但适用于加密的用途。该实现还需要使用具有足够熵的种子,如系统级熵源。
语法
cryptoObj.getRandomValues(typedArray);
参数
typedArray
是一个基于整数的 TypedArray
,它可以是 Int8Array
、Uint8Array
、Int16Array
、 Uint16Array
、 Int32Array
或者 Uint32Array
。在数组中的所有的元素会被随机数重写。(注释:生成的随机数储存在 typedArray
数组上。)例子
window.crypto.getRandomValues(new Int8Array(2))//Int8Array(2) [44, -3]
window.crypto.getRandomValues(new Uint8Array(2))//Uint8Array(2) [218, 119]
window.crypto.getRandomValues(new Int16Array(2))//Int16Array(2) [24582, -15808]
window.crypto.getRandomValues(new Uint16Array(2))//Uint16Array(2) [55391, 55756]
window.crypto.getRandomValues(new Int32Array(2))//Int32Array(2) [1574608122, -836595554]
window.crypto.getRandomValues(new Uint32Array(2))//Uint32Array(2) [1906545366, 2391348462]
Math.random()的等价表达式:window.crypto.getRandomValues(new Uint8Array(1)) * 0.001
详见:https://developer.mozilla.org/zh-CN/docs/Web/API/RandomSource/getRandomValues