跳到正文

动态口令生成

TOTP Code Generator

把 TOTP 密钥换成当前的六位验证码并带倒计时,用来验证两步验证配得对不对。

扫描两步验证二维码时,你存下的是一个共享密钥,而在下次登录之前,你没法从 App 里看出它存对了没有。把同一个密钥粘到这里,会显示它此刻应该产生的验证码,这样不一致在你被锁在门外之前就看得见。

🔒 完全在你的浏览器里运行totp2faotpauth
也接受光秃秃的密钥,比如“jbsw y3dp ehpk 3pxp”——空格和大小写都不影响。

密钥只存在这个页面的内存里。不写 localStorage,不放进网址,也不发给任何服务器——HMAC 由你浏览器的 crypto.subtle 算。刷新标签页就没了,这是故意的:这是用来检查配置的工具,不是能把密钥加密存放的验证器 App 的替代品。

怎么用

  1. 粘贴 Base32 密钥

    就是网站在“无法扫码?”下面显示的那串字符。接受空格和小写;一整条 `otpauth://` URI 也可以整个粘进来,参数会从中读出。

  2. 对齐参数

    几乎所有服务都用 SHA-1、六位数字、30 秒周期,这也是这里的默认值。少数服务用八位数字或 SHA-256——如果验证码不对而时钟是对的,差别就出在这里。

  3. 和 App 对照

    两边在同一个时间窗口内应该显示同样的六位数。如果整整差了一个窗口,那是设备时钟不准——TOTP 是当前时间的函数,不是计数器的函数。

常见问题

把正在使用的两步验证密钥粘到这里安全吗?

密钥留在标签页里——验证码用浏览器自带的 HMAC 计算,没有请求。但密钥本身就是整个第二因素,所以不要把它粘进你没有核实过的页面,用完把输入框清空。

这个能代替我的验证器 App 吗?

不能——它什么都不存,你每次登录都得重新粘密钥;而且把两步验证密钥和密码放在同一个地方,就失去了两个因素的意义。

验证码和 App 一致,但还是被拒绝。

那就是两边一起错了,这几乎总是意味着设备时钟偏了。服务器通常接受前后各一个窗口;超出这个范围,就同步时钟再试。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。