开源个参考 chrome 密码生成写的密码生成库

简介: 几个月前因为某个需求参考了 chrome 的密码生成的源码撸了一个 js 的密码生成器,这里分享一下。

网络异常,图片无法展示
|

几个月前因为某个需求参考了 chrome 的密码生成的源码撸了一个 js 的密码生成器,这里分享一下。

前排先上下 GitHub 链接

再贴上码上掘金上的使用 demo:

使用

使用很简单,直接通过 npm install 即可。

npm install z-generate-password
复制代码

也可通过 cdn 引入:

<script src="https://cdn.jsdelivr.net/npm/z-generate-password@latest/umd/index.min.js"></script>
复制代码

随后即可在代码中使用:

const password = zGeneratePassword();
复制代码

自定义规则

该库除了上述基本使用外,还提供了丰富的自定义功能。

默认情况下,生成规则为:

  • 至少包含一个小写字母
  • 至少包含一个大写字母
  • 至少包含一个数字
  • 不能存在连续的 - 或者是 _(默认规则不使用符号,使用符号时该规则生效)

不能存在连续的 - 或者是 _,主要是因为某些字体库连续的中划线或下划线会被解析成其它字符,影响密码的可读性。除此之外默认的字符集中还排除了 1l0oO 这几个比较容易混淆的字符。

库中提供了多个自定义规则:

{
    /** length of the password, pass a [min, max] as length range */
    length?: number | [number, number] | undefined;
    /** custom your symbol collection */
    symbols?: string | true | undefined;
    /** custom your digit collection */
    digits?: string | undefined;
    /** custom your lowercase char collection */
    lowerCaseChars?: string | undefined;
    /** custom your uppercase char collection */
    upperCaseChars?: string | undefined;
    /** add your own char collection */
    customChars?: string | undefined;
}
复制代码

通过 length,可以设定密码的长度,也可使用数组来表示密码长度的生成范围。

默认生成时不会使用 symbols,如果需要使用 symbols,可以传入 true,此时符号的字符集为 -_.:!,或者传入一个字符串,表示使用的符号集。

const newPassword = generatePassword({
    symbols: true
});
// MS2_!U9ni.4QHaMk
复制代码
const newPassword = generatePassword({
    symbols: '@&*^'
});
// q2V^ppADRVEC3BVb
复制代码

digits 为数字集合,默认为 23456789,为了可读性排除了 1 和 0。

lowerCaseChars 为小写字符集,默认为 abcdefghijkmnpqrstuvwxyz,为了可读性排除了 lo

upperCaseChars 为大写字符集,默认为 ABCDEFGHJKLMNPQRSTUVWXYZ,为了可读性排除了 IO

digitslowerCaseCharsupperCaseChars 就可通过传入 string 来自定义字符集,如果需要关闭该字符集,可将其设置为 null

const newPassword = generatePassword({
    digits: null
});
// fcQDHXaPWgsTtdUD
复制代码

如果有自定义字符的需求,可使用 customChars 设置。

const newPassword = generatePassword({
    customChars: '我是中国人'
});
// RVg59M6CKP中i国4zT
复制代码

生成的密码会至少包含提供的每个字符集中至少一个字符。

安全性

虽然默认的规则生成的密码看起来可能不是很安全,其实只是错觉,安全性是针对硬破解次数而定的,随机生成的密码不存在字典匹配的问题,只需通过计算硬破解次数即可判断密码的安全性。经过计算默认生成规则的熵值约为 88bits - 5.26 \* 10^26,计算公式为 61^15-53^15-37^15-37^15+29^15+29^15+13^15-5^15,可使用 js 计算 Math.log2(61**15-53**15-37**15-37**15+29**15+29**15+13**15-5**15))

安全性计算逻辑可参考 chrome-generated-passwords-not-high-entropy

技术实现

生成密码逻辑参考了 chrome 密码生成相关代码, 具体生成流程如下:

  1. 填充一个大写字母、小些字母、数字(如有提供其它字符集,也会从中随机一个字符进行填充)
  2. 从总字符集中抽取字符填充至 16 位(或填充至自定义位数)
  3. 将生成的字符乱序
  4. 进行可读性检测(存在 _- 时)

js 没有 shuffle 函数,故采用 Fisher–Yates shuffle 算法编写了 shuffle 进行乱序,上一篇关于乱序的文章也是因为本需求所做的。

其它

本库使用 ts 编写、经过完善测试、MIT 协议、支持 tree-shaking、支持 umdesm 等多种格式、无依赖、体积只有 800B,欢迎使用。😉

相关文章
|
Web App开发 数据安全/隐私保护
Chrome谷歌浏览器密码数据导出与导入管理(实现数据无缝同步)
Chrome谷歌浏览器密码数据导出与导入管理(实现数据无缝同步)
1038 0
|
10月前
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
775 1
|
Web App开发 JavaScript
Chrome控制台引入js库jQuery为例
Chrome控制台引入js库jQuery为例
590 0
|
Web App开发 iOS开发
|
Web App开发 Android开发 内存技术
|
Web App开发 开发工具 开发者
基于Chrome开源提取的界面开发框架开篇--转
初衷 一直希望VC开发者能够方便的开发出细腻高品质的用户界面。我喜欢C++,选择的平台是Windows,所以大部分时间用VC。我自身不排斥其他技术或者开发语言或者开发工具,都去了解,了解的目的是想吸取好的思想补充VC开发方面的不足。
1795 0
|
12月前
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
1082 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
|
8月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
475 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本