如何用Go语言实现TOTP算法,构建Golang OTP动态口令生成器?
- 内容介绍
- 文章标签
- 相关推荐
本文共计826个文字,预计阅读时间需要4分钟。
自己手动编写RFC 6238(TOTP 标准)容易出错:
- 它默认用
time.Now().UTC()计算计数器,避免本地时区干扰 -
otp.NewTOTP()返回的*TOTP实例可复用,不是一次性对象 - 注意:v1.x 版本不兼容 Go 1.21+ 的
crypto/hmac内部变更,必须用 v2.0.0+(当前最新是 v2.1.0)
otp.GenerateCode() 的参数陷阱和正确调用方式
这个函数看似简单,但两个参数顺序和类型极易搞反:secret 必须是原始字节切片(不是 base32 字符串),time 是 int64 时间戳(单位秒),不是 time.Time。
本文共计826个文字,预计阅读时间需要4分钟。
自己手动编写RFC 6238(TOTP 标准)容易出错:
- 它默认用
time.Now().UTC()计算计数器,避免本地时区干扰 -
otp.NewTOTP()返回的*TOTP实例可复用,不是一次性对象 - 注意:v1.x 版本不兼容 Go 1.21+ 的
crypto/hmac内部变更,必须用 v2.0.0+(当前最新是 v2.1.0)
otp.GenerateCode() 的参数陷阱和正确调用方式
这个函数看似简单,但两个参数顺序和类型极易搞反:secret 必须是原始字节切片(不是 base32 字符串),time 是 int64 时间戳(单位秒),不是 time.Time。

