一个跑在灵动岛上的 2FA 验证码插件。在岛上直接看 / 复制验证码,在自带窗口里管理多个平台的密钥。
一、60 秒上手
- 把
Nps2FA.dll放进宿主的plugins\目录(与别的插件放在一起); - 重启宿主(或从插件中心重新加载);
- 岛上的盾牌图标出现:
- 左键点它 = 展开详情页看验证码;
- 右键点它 = 打开配置窗口 ← 第一次就点这里;
- 另有一个入口:详情页右上角的「配置」按钮,作用与右键相同;
- 在配置窗口里点 新增 → 把平台给的密钥填进去 → 点 应用 → 点 保存。
- 最省事的填法是直接扫码:在平台上把二维码显示出来,点配置窗口里的 「截屏扫码」; 或者把二维码图片存下来,点 「导入二维码图片」。
完成。回到岛上,盾牌旁就会显示验证码。
就算完全不知道本文放在哪,配置窗口底栏有一个「配置教程」按钮, 点它就会在浏览器里打开本文(说的是插件里带着的那一份,与当前装的版本严格配套)。
岛上的验证码会随剩余时间变色:绿 → 琥珀(剩 30% 以下)→ 红(剩 12% 以下), 组件下缘那条细线就是剩余时间长度,瞥一眼就知道还能不能来得及用。
二、怎么拿到密钥(以 GitHub 为例)
GitHub
- 打开 https://github.com/settings/security → Two-factor authentication;
- 如果还没开:Enable 2FA → Set up using an app;
- 页面会给一个二维码和一个 setup key(形如
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ); - 二维码正下方有个 "enter this text code instead" 之类的链接,点开会显示
otpauth://totp/GitHub:你的用户名?secret=…&issuer=GitHub这样一段链接; 也可以用手机扫一下二维码、从结果里把链接复制出来。
其它平台
Google / Microsoft / 阿里云 / 腾讯云 / Steam / 自建 GitLab 等,找的都是同一个东西: 「设置二次验证 / 绑定验证器 App」页面里的密钥或 otpauth 链接。 叫法可能是 setup key / secret key / 密钥 / 手动输入密钥,位置通常在二维码下方。
三种填法
| 你手上是什么 | 怎么填 |
|---|---|
otpauth://totp/GitHub:alice?secret=…&issuer=GitHub(一整串链接) | 直接粘贴到密钥框 —— 平台名、账号、算法、位数、周期会自动全部填好 |
一长串 Base32 密钥(如 GEZDGNBVGY3TQOJQ…) | 粘贴到密钥框,然后自己填平台名 / 账号 / 位数 |
| 二维码(最省事) | 见下面「扫码添加」 |
扫码添加
平台上那个二维码本身就是这个链接。所以不用手抄、也不用逐个字段核对:
| 二维码在哪儿 | 怎么做 |
|---|---|
| 在浏览器 / 客户端里显示着 | 点配置窗口的 「截屏扫码」 —— 它会先把配置窗口自己藏起来,抓下整个屏幕找二维码,然后把窗口放回来 |
| 你把它存成了一张图片(或别人发给你一张截图) | 点 「导入二维码图片」 → 选那张图 |
| 平台上只给了二维码、没给链接 | 同上,两条路都行 |
识别成功后,平台名、账号、算法、位数、周期会一次带全,与「从剪贴板解析链接」完全一样的效果。
扫码的两个提示
- 屏幕上有好几个二维码时,可能先扫到别的那一个 —— 看清状态行写的是哪个平台 / 账号;
- 有些平台印的二维码里只有一串密钥(没有链接)。插件会把它填进「密钥」框, 并提醒你还要补上平台名 —— 不会有「扫完就该好了」这种事,最后一步永远是你自己确认。
💡 也可以先复制链接,再点配置窗口里的 「从剪贴板解析链接」 按钮,效果与直接粘贴一样。 编辑区那一行还有两个按钮:「撤销编辑」(把当前编辑内容退回上次应用的样子) 与 「应用修改 / 添加到列表」(把编辑内容写进列表)。
Steam:在 Steam 客户端「账户明细 → 管理 Steam 令牌」里,用手机 App 绑定后从 otpauth://steam/… 链接粘贴。Steam 的规格是固定的(5 位 / 30 秒),插件会自动锁定。
三、配置窗口里都有什么
窗口本身可以拖动、拖边缩放、点右上角关闭;标题条左侧的置顶按钮控制是否总在最前。
左列(列表区)
| 元素 | 作用 |
|---|---|
| 搜索框 | 按别名 / 平台 / 账号过滤(只影响显示,不改变记录) |
| 列表 | 点一下选中;滚轮翻页 |
| 新增 / 删除 | 新增一条;删除会先确认(密钥删掉不可恢复) |
| ↑ / ↓ | 调整列表顺序(只影响显示顺序,不影响验证码计算) |
右列(编辑区)
| 字段 | 说明 |
|---|---|
| 别名 | 你自己起的备注,如「公司 GitHub」「小号谷歌」。列表和岛上优先显示它 |
| 平台 | 官方平台名,如 GitHub。粘贴链接时会自动填好 |
| 账号 | 该平台上的账号(邮箱 / 用户名)。同平台多账号靠它区分 |
| 密钥 | Base32 共享密钥。点右侧小眼睛可以临时显示明文 |
| 类型 / 位数 / 周期 / 算法 | 默认 6 位 / 30 秒 / SHA1 —— 绝大多数平台都是这个,不用动 |
底栏
| 按钮 | 作用 |
|---|---|
| 配置教程 | 把本文用浏览器打开(正文就在插件 dll 里,会编译成 HTML 落在系统的临时目录里) |
| 导出备份 | 产出一个带口令的 .npsbk 文件(换设备 / 重装系统靠它) |
| 导入备份 | 把 .npsbk 合并进来(重复的会自动跳过) |
| 打开文件夹 | 在资源管理器里打开密钥库所在目录 |
| 保存 | 把当前改动加密写盘 |
💡 教程走的是「浏览器」而不是窗口内自绘:本文里的链接可以直接点、长文可以滚动、代码块可以选中复制。 点「配置教程」后状态行会给出实际打开的 HTML 路径。
输入框支持完整的编辑操作:鼠标点哪儿光标就到哪儿、拖动可以选一段、Ctrl+A 全选、 Ctrl+C 复制、Ctrl+X 剪切、Ctrl+V 粘贴、Ctrl+S 保存、Tab 在输入框之间循环、 方向键 / Home / End / Delete 都在,Esc 关窗。
在密钥框里
Ctrl+C时如果没有选中任何内容,会复制整格 —— 核对一长串 32 位密钥时不用再拖选一遍。
四、岛上的显示
4.1 收起时的小条
| 操作 | 结果 |
|---|---|
| 鼠标悬浮在小条上 | 验证码明文显示(默认行为:平时是圆点,凑近看才显示 —— 配置窗口里可关) |
| 鼠标移开 | 恢复成圆点 |
| 点小条上那串数字 / 圆点 | 复制这条的验证码到剪贴板并弹提醒(圆点状态下复制的也是真实码) |
| 点小条其余位置(盾牌、别名、空白) | 展开详情页 |
| 右键点小条 | 打开配置窗口 |
| 小条底部细线 | 这条码的剩余时间;变红 = 快过期 |
4.2 想上岛多条 / 换一条显示
在配置窗口的列表里,每条记录行尾有个小圆灯:点亮 = 这条上岛。
| 点亮情况 | 岛上显示 |
|---|---|
| 只亮一条 | 岛上就显示它 |
| 亮多条 | 岛上每 5 秒轮换一条(按列表顺序) |
| 一个都不亮 | 岛上显示上次在详情页里选中的那条(老习惯不变) |
改完记得点右下角**「保存」**。配置窗口里也有「悬浮时才显示验证码」的开关,同样保存后生效。
4.3 详情页(左键展开后)
| 操作 | 结果 |
|---|---|
| 鼠标移到岛外 | 3 秒后自动收起 |
| 详情页里点某一行的那串数字 | 复制这条的验证码到剪贴板,并弹一条提醒;同时把岛上显示的切成这一条 |
| 详情页里点别的位置(别名、账号、空白) | 不复制任何东西,面板保持打开 |
| 详情页里的「隐藏 / 显示验证码」 | 一键把所有验证码变成圆点(给别人演示屏幕时用);遮着的时候点那串圆点照样能复制 |
| 详情页里的「配置」 | 打开配置窗口(与右键同效) |
详情页的高度会随密钥条数自动调节:只有一两条时面板很矮,条数多时自动变高, 同屏最多显示 7 行;超过 7 条时用 ▲ / ▼ 翻页,或在列表里按住拖动滚动。 复制只认那串数字:在别处按下再拖动就是滚列表,不会顺手把码换掉。
隐私优先级
「隐藏 / 显示验证码」(全局遮码)开着时,悬浮也不会明文 —— 演示屏幕用的开关说话算话。 「悬浮才显示」只是把平时的码藏起来,防旁边的人瞄一眼;它不覆盖你主动要求的遮码。
右键只打开配置窗口,岛体不会跟着展开
宿主的右键本来是「广播给组件、然后只要组件有详情页就把它展开并吃掉这次右键」,看起来拦不住; 但它其实连读两次组件详情页,两次的用途不同 —— 插件利用这一点让这次右键被正常吃掉 (所以宿主的设置窗口不会弹出来)、同时又不让详情页展开。全程不改宿主源码。
4.4 验证码不对?先自查这三条
验证码的算法与 Google Authenticator / Microsoft Authenticator 完全一致 (Base32 + RFC 6238,6 位 / 30 秒 / SHA1),并且已用另一份独立实现逐条交叉验证过。 所以如果平台说「验证码不对」,几乎一定出在下面三条里:
- 系统时间准不准。TOTP 靠时间片算,本机时间与平台差超过一个周期(30 秒)就一定会失败。 打开「自动设置时间」并同步一次。
- 密钥是不是逐字符一致的。配置界面里点密钥框右边的「显示」,与平台页面上那串逐字符比一遍。 ⚠️ 手抄的密钥错一位仍然是合法 Base32 —— 插件照样算得出码、不会报错,只有平台会说「不对」。 所以插件会在你手打密钥时提醒你改用复制粘贴。
- 算法参数是不是 6 位 / 30 秒 / SHA1(GitHub 等绝大多数平台都是这一组,也是默认值)。 配置界面「类型 / 码长 / 周期 / 算法」四行可以直接核对。
最省事的做法是别手抄:在平台的二次验证页面复制那串 otpauth:// 链接, 回到配置界面点「从剪贴板解析链接」—— 平台名、账号、算法、位数、周期会一次带全。
编辑时旁边的「预览」卡里就显示着当前这一秒的验证码与剩余秒数,可以和手机上的 App 对照一下再保存。
五、备份与换设备(请务必读这一节)
5.1 日常:什么都不用做
密钥库是加密存在插件自己文件夹里的两个文件:
plugins\Nps2FA\2fa.vault ← 你的全部密钥(AES-256-GCM 加密)
plugins\Nps2FA\2fa.key ← 本机的解锁密钥(用 Windows DPAPI 绑定你的账户)
plugins\Nps2FA\2fa.vault.bak ← 每次保存前的上一版(自动滚动保留)打开时不需要输任何口令 —— 解锁密钥只有你这台电脑的这个 Windows 账户能解开。 也就是说,别人把你的 2fa.vault 拷走也打不开,双击也看不出里面存了哪些平台。
5.2 换设备 / 重装系统:必须提前导出备份
重装系统、换电脑、换 Windows 账户之后,2fa.key 就再也解不开了
这是 DPAPI 的设计(它绑定的是本机的用户凭据),不是缺陷 —— 代价是必须另外准备一条通路。
请在换设备之前做一次:
- 配置窗口 → 导出备份;
- 设一个至少 8 位的备份口令 → 它会写进
.npsbk文件里;- 口令不会保存在本机,请记在别处(密码管理器 / 纸上 / 另一个网盘);
- 忘记口令 = 备份作废,没有任何后门;
- 得到一个
nps2fa-backup-日期时间.npsbk文件 —— 把它放到 U 盘 / 网盘 / 邮箱里。
新设备上:
- 装好宿主和插件;
- 配置窗口 → 导入备份 → 选那个
.npsbk→ 输入备份口令 → 确定; - 搞定,全部密钥都回来了(导入是合并,不会覆盖你已有的记录)。
也可以直接把
.npsbk改名成2fa.vault放进plugins\Nps2FA\: 插件会认出它是口令模式并请你输入口令,解开之后自动转存成本机免口令模式。 这条路径适合「批量把整台机器的数据搬过去」。
5.3 万一密钥丢了(没做备份)
打开配置窗口会看到一句说明。可选的两条路:
- 有
.npsbk备份 → 导入备份; - 没有任何备份 → 只能重新登录各平台,关掉旧的二次验证再重新绑定一次,然后重新添加。 原有记录无法恢复(这正是要提前备份的原因)。
六、常见问题
Q:岛上什么都不显示? 依次检查:① 宿主插件中心里本插件是否已启用;② 是否还没添加任何密钥(先开配置窗口点「新增」); ③ 配置窗口状态行 / AccountStore 提示里说的是什么 —— 如果写着「密钥库需要处理」,按提示导入备份。
Q:验证码和手机上显示的不一样? 按这个顺序查:① 密钥有没有复制全(少一位或多一位都会错,且完全看不出); ② 位数是不是对的(平台写 8 位就选 8 位,默认是 6);③ 算法是不是 SHA1(少数企业服务用 SHA256); ④ 用解析链接按钮重新粘一次整条 otpauth:// 链接 —— 这一步会自动把上面三项全部纠对。
Q:能同时放好几个平台的密钥吗? 能,数量不限。每条都有独立的平台名 / 账号 / 位数 / 周期 / 算法,同平台多账号用「账号」和「别名」区分。
Q:扫码扫不出来? ① 截屏那条路要先把二维码显示在屏幕上,而且别被别的窗口挡住(插件会藏起配置窗口自己, 但藏不了别的程序);二维码太小也会失败 —— 在浏览器里放大一点再扫; ② 导入图片那条路:换一张更清楚、更完整的图(别用聊天软件压缩过的缩略图,别裁掉二维码的四个角); ③ 状态行会写清是哪一步不行(抓不到屏幕 / 图片读不了 / 图里没找到码 / 码读坏了); ④ 不支持「拍屏幕的照片」:手机翻拍的照片有透视畸变(近大远小),这个版本不处理。
Q:数据到底存在哪? 配置窗口底栏的「打开文件夹」按钮会直接打开它,状态行里也会写一句完整路径 (含「为什么不在插件目录」的说明,比如插件装在 Program Files 下不可写时会自动改存到用户目录)。
Q:能把它当便携版放 U 盘里用吗? 可以。设一个环境变量 NPS2FA_DATA_DIR 指向你想放数据的目录,插件就会把 2fa.vault / 2fa.key 放在那里(不设则按上面的规则自动选)。
Q:为什么打开 2fa.vault 是一堆乱码? 这正是设计目标 —— 文件用 AES-256-GCM 加密并用了自己的容器格式, 不会被记事本 / Excel 读懂,也不会被宿主的插件目录同步误带走。
七、安全说明(简短版)
- 密钥库:AES-256-GCM,任何 1 bit 篡改都会被检测出来(不会静默给你一个错的验证码);
- 本机解锁密钥:Windows DPAPI(当前用户 + 附加熵),拷走文件也解不开;
- 导出备份:PBKDF2-HMAC-SHA256(210 000 次)+ AES-256-GCM,口令是你的全部防线,请用好密码;
- 文件写入是原子替换 + 滚动备份:保存到一半断电不会得到半截文件(上一版还在
.bak里); - 本插件不联网、不上传任何东西;验证码是本地按 RFC 6238 算出来的;
- 扫码之后的提示语里不会出现密钥全文 —— 只说识别到了哪个平台 / 账号 (或只露密钥的首尾各 4 位)。状态行会被截图、会被旁人看到,而二维码里装的往往就是密钥本身。