跳到主要内容

如何在神锁中导入 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 扫描识别。