Math.random()的加密安全替换方法window.crypto.getRandomValues

Math.random()

返回介于 0(包含) ~ 1(不包含) 之间的一个随机数。
Math.random()函数不是加密安全的随机数生成器。

window.crypto.getRandomValues

Crypto.getRandomValues() 方法让你可以获取符合密码学要求的安全的随机值。传入参数的数组被随机值填充(在加密意义上的随机)。

为了确保足够的性能,不使用真正的随机数生成器,但是它们正在使用具有足够熵值伪随机数生成器。它所使用的 PRNG 的实现与其他不同,但适用于加密的用途。该实现还需要使用具有足够熵的种子,如系统级熵源。

语法

cryptoObj.getRandomValues(typedArray);

参数

  typedArray是一个基于整数的 TypedArray,它可以是 Int8ArrayUint8ArrayInt16Array、 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

posted @ 2019-11-29 11:00  vickylinj  阅读(6774)  评论(0编辑  收藏  举报