如何在神锁中导入 Secret Code
众所周知,神锁离线版只能通过扫描二维码来导入验证器,并不能直接导入 Secret Code。因而我们通过构造一个二维码来导入 Secret Code。
OTPauth 协议
导入验证器时扫描的二维码,其内容是以 OTPauth 协议组织的。其基本形式如下:
otpauth://算法类型/颁发者:账户名?secret=共享密钥&issuer=颁发者
例如:
otpauth://totp/MyCompany:Admin?secret=ABCDEFGHIJKLMNOP
当然,还有其他参数,不过我们只需要了解以上这些必填项即可。
算法类型
定义OTP生成算法:
totp:基于时间的一次性密码(Time-based OTP)。大部分情况填这个就好了。hotp:基于计数器的一次性密码(HMAC-based OTP)。
详细对比(by DeepSeek)
| 特性 | TOTP (基于时间) | HOTP (基于计数器) |
|---|---|---|
| 核心驱动 | 时间(当前Unix时间戳除以步长) | 事件计数器(每次验证后递增) |
| 验证码有效期 | 较短,典型为30秒,过期自动失效 | 较长,有效期可到下次成功验证前 |
| 同步要求 | 客户端与服务端时间需大致同步 | 客户端与服务端计数器需同步 |
| 优缺点 | 优点:安全性高,验证码自动失效;缺点:依赖准确的系统时间。 | 优点:不依赖时间,适用于离线硬件令牌;缺点:有被重放攻击的风险。 |
| 典型应用 | 软件验证器(Google Authenticator等)、在线服务 | 硬件令牌(银行U盾等)、离线场景 |
共享密钥
就是所谓 Secret Code,是一个长度为 16 的 Base32 编码字符串。
生成二维码
按照上一小节构造完 otpauth:// 串,使用任意工具生成二维码就好了。
例如可以使用 草料二维码生成器。
例子(内容见上文)
上面这个二维码应该能正常被 App 扫描识别。