JS随机数与安全

简介: Math.random() 函数返回一个浮点,伪随机数在范围0到小于1,也就是说,从0(包括0)往上,但是不包括1(排除1),然后您可以缩放到所需范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置。一个非密码学安全的随机数来源。

Math.random()

JavaScript高级程序设计(第4版)


Math.random() 方法返回一个 0~1 范围内的随机数,其中包含 0 但不包含 1。


MDN


Math.random() 函数返回一个浮点,伪随机数在范围0到小于1,也就是说,从0(包括0)往上,但是不包括1(排除1),然后您可以缩放到所需范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置。

一个非密码学安全的随机数来源。


JavaScript4 高级程序设计(第4版)中 注意 提示:


Math.random()方法在这里出于演示目的是没有问题的。如果是为了加密而需要生成随机数(传给生成器的输入需要较高的不确定性),那么建议使用window.crypto. getRandomValues()。


思考

之前没看到关于 Math.ramdom() 的类似提示,发现日常开发中有时也会遇到通过 Math.random() 进行一些基础的随机加密操作,但从来没意识到安全问题。接下来看下 window.crypto. getRandomValues()


window.crypto.getRandomValues()


MDN

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

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


在浏览器中运行

image.png


总结


开发中如果只是随意生成一个数字,可以直接使用 Math.random(),如果涉及到安全就需要使用 window.crypto.getRandomValues() 了,注意这里的 getRandomValues 的参数传递,在使用时也需要确保 window.crypto.getRandomValues 可用,在 node 中使用需要安装 get-random-values 库。


参考链接

developer.mozilla.org/zh-CN/docs/…

developer.mozilla.org/zh-CN/docs/…

developer.mozilla.org/zh-CN/docs/…

www.npmjs.com/package/get…


相关文章
|
8月前
|
JavaScript
js点点正则表达式,随机数
js点点正则表达式,随机数
|
8月前
|
JavaScript 前端开发 数据安全/隐私保护
如何在JavaScript中生成随机数
在编程中,我们经常需要使用随机数来模拟不确定性或创建随机化的功能。JavaScript提供了几种方法来生成随机数。让我们看看其中一些方法。
85 0
|
1月前
|
JavaScript 前端开发
JavaScript生成的随机数随机字符串JS生成的随机数随机字符串
JavaScript生成的随机数随机字符串JS生成的随机数随机字符串
16 1
|
4月前
|
缓存 JavaScript Java
thymeleaf引用JS加随机数防止缓存
thymeleaf引用JS加随机数防止缓存
20 0
|
9月前
|
安全 JavaScript
js如何安全的获取undefinde值?
为什么要安全的获取undefinde值? 因为 undefined 是一个标识符,所以可以被当作变量来使用和赋值,但是这样会影响 undefined 的正常判断。
|
4月前
|
安全 JavaScript 算法
JS随机数与安全
JS随机数与安全
|
5月前
|
JavaScript
js 生成随机数
js 生成随机数
|
5月前
|
JavaScript 前端开发 安全
2023年中职“网络安全“—JavaScript安全绕过
2023年中职“网络安全“—JavaScript安全绕过
58 0
|
7月前
|
JavaScript 前端开发
JS随机数功能详解
JS随机数功能详解
101 0
|
10月前
|
JavaScript 前端开发 安全
前端安全-JS原型链污染是怎么回事
面试题经常会提到一个问题,就是前端安全问题哪些
93 0