【随机密码生成器】一个密码学意义上的随机密码生成器
limitless新增加了一个集成的随机密码生成器,可以通过以下链接轻松访问:
随机密码生成器 – limitless介绍
该生成器由开源代码:随机密码生成器: 使用js实现的随机密码生成器 (gitee.com) 修改而来。
该随机密码生成器加载完成后,所有生成操作均在用户本地处理,服务器不参与任何密码生成的环节。并且随机函数采用密码学意义上的高信息熵加盐随机函数,保证无法通过种子攻击获取用户生成的密码。
该生成器网页无任何上传请求。
主要修改:
- 替换了JavaScript的弱随机生成函数
math.random()为强随机生成函数window.crypto.getRandomValues(array);,该函数拥有密码学意义上的随机强度,且支持大部分浏览器。 - 将除去媒体文件以外的所有请求改为从limitless请求。
- 其他显示上的修改
关于函数window.crypto.getRandomValues(array)
参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Crypto/getRandomValues
Crypto.getRandomValues() 方法让你可以获取符合密码学要求的安全的随机值。传入参数的数组被随机值填充(在加密意义上的随机)。
为了确保足够的性能,不使用真正的随机数生成器,但是它们正在使用具有足够熵值伪随机数生成器。它所使用的 PRNG 的实现与其他不同,但适用于加密的用途。该实现还需要使用具有足够熵的种子,如系统级熵源。
语法
cryptoObj.getRandomValues(typedArray);
参数
是一个基于整数的 TypedArray,它可以是 Int8Array、Uint8Array、Int16Array、 Uint16Array、 Int32Array 或者 Uint32Array(不可使用 Float32Array 或者 Float64Array)。在数组中的所有的元素会被随机数重写。(注释:生成的随机数储存在 typedArray 数组上。)
异常事件
QuotaExceededErrorDOMException
如果请求的长度超过 65536 字节,则抛出该异常。
例子
JSCopy to Clipboard
/* 假设 window.crypto.getRandomValues 可用 */
var array = new Uint32Array(10);
window.crypto.getRandomValues(array);
console.log("Your lucky numbers:");
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
浏览器兼容性
Report problems with this compatibility data on GitHub
| 平台 | desktop | mobile | server | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 浏览器 | Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | Deno | Node.js |
getRandomValues() | 11Toggle history | 12Toggle history | 21Toggle history | 15Toggle history | 5Toggle history | 18Toggle history | 21Toggle history | 14Toggle history | 5Toggle history | 1.0Toggle history | 37Toggle history | 1.0Toggle history | 17.4.0Toggle history |
2024年1月20日
