73 lines
3.0 KiB
Markdown
73 lines
3.0 KiB
Markdown
# Simple Password
|
||||
|
|
|
|||
|
|
一个干净、纯本地的密码生成器。单文件 `index.html`,双击即用,也可丢到任意静态托管上。
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
## 特点
|
|||
|
|
|
|||
|
|
- **纯前端,零依赖** — 一个 `index.html`,没有构建步骤、没有 CDN、没有任何外部请求。断网可用。
|
|||
|
|
- **密码学安全随机** — 走 `crypto.getRandomValues` + 拒绝采样消除取模偏差,不用 `Math.random()`。
|
|||
|
|
- **生成即复制** — 默认开启自动复制;剪贴板 API 不可用(如 `file://` 下的旧浏览器)时自动降级到 `execCommand`。
|
|||
|
|
- **深浅色** — 跟随系统偏好,可手动切换并记住选择。首帧前定主题,不会白屏闪一下。
|
|||
|
|
- **可调长度** — 4~64 位。选了「每类至少一位」时,下限自动收紧到所选类型数。
|
|||
|
|
- **四类字符可选** — 小写 / 大写 / 数字 / 符号,四类全不选会被兜回小写,不会生成空密码。
|
|||
|
|
- **排除易混淆字符** — 一键去掉 `0 O o 1 l I`,抄写不出错。
|
|||
|
|
- **自定义排除** — 想避开 `@`、空格或某个符号,直接填进去。
|
|||
|
|
- **强度与熵** — 按 `长度 × log₂(字符池)` 算真实熵,分五档给出评价,同时显示字符池规模。
|
|||
|
|
- **批量候选** — 一次出 5 个,点任意一条即复制。
|
|||
|
|
- **最近生成** — 只存在本机 `localStorage`,最多 6 条,可一键清空。
|
|||
|
|
|
|||
|
|
## 使用
|
|||
|
|
|
|||
|
|
直接打开 `index.html` 即可。
|
|||
|
|
|
|||
|
|
想用 http 协议(例如需要真实剪贴板权限时):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python -m http.server 8000
|
|||
|
|
# 然后访问 http://127.0.0.1:8000/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 快捷键
|
|||
|
|
|
|||
|
|
| 键 | 作用 |
|
|||
|
|
|---|---|
|
|||
|
|
| `空格` | 换一个密码 |
|
|||
|
|
| `C` | 复制当前密码 |
|
|||
|
|
| `点击密码` | 也可以复制 |
|
|||
|
|
|
|||
|
|
在输入框里打字时不会误触发。
|
|||
|
|
|
|||
|
|
## 关于安全
|
|||
|
|
|
|||
|
|
- 所有运算在浏览器里完成,**不联网、不上传、不写日志**。
|
|||
|
|
- 用 `crypto.getRandomValues` 取随机数,并按「拒绝采样」丢弃落在偏置区间的值,避免取模带来的分布倾斜。
|
|||
|
|
- 勾「每类至少一位」时,先从每类各取一位,剩余位从全池随机,最后整体洗牌 —— 保证覆盖的同时不引入位置可预测性。
|
|||
|
|
- 历史记录存在 `localStorage` 里,任何能访问这台机器的人都能看到。**在共用电脑上建议用完点「清空」**,或干脆关掉自动复制、不复制到历史。
|
|||
|
|
|
|||
|
|
## 浏览器支持
|
|||
|
|
|
|||
|
|
Chrome / Edge / Firefox / Safari 的近两年版本,以及移动端浏览器。
|
|||
|
|
|
|||
|
|
用到 `backdrop-filter`(毛玻璃)和 `crypto.getRandomValues`,老浏览器上会自动降级为不透明背景,功能不受影响。
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
index.html 全部内容:结构、样式、脚本
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 开发校验
|
|||
|
|
|
|||
|
|
改完 `index.html` 后建议跑一遍(脚本在仓库外的 `_tooling/`,配合 `jsdom` 与 `playwright`):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
node _sp_test.js # 功能判据(jsdom,80 条,含反向注入 24 条)
|
|||
|
|
node _sp_visual.js # 真实浏览器几何 / 对比度 / 多视口(约 101 条)
|
|||
|
|
node _sp_clip.js # 真实剪贴板端到端(18 条)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## License
|
|||
|
|
|
|||
|
|
MIT
|