Python: 使用pyotp实现OTP一次性密码验证

使用pyotp实现OTP一次性密码验证

OTP的基本原理

  1. 生成一个共享秘钥作为随机数的种子
  2. 服务端通过种子计算出当前的密码
  3. 客户端也通过相同的种子计算出当前的密码
  4. 验证客户端生成的密码和服务端生成的密码是否匹配

服务端和客户端计算的方式一样

复制代码
共享密钥 + 时间因子 + 算法 => 密码结果

文档

安装

bash 复制代码
pip install pyotp

基本使用示例

python 复制代码
import pyotp

# 秘钥
secret_key = 'S5MPVVK6TYBAYJTKEWW5UGDSC2NX6OPS'

totp = pyotp.TOTP(secret_key)

# 生成一个随机密码
totp.now()  # => '492039'

# 验证
totp.verify('198361') # 返回 True或False

秘钥有一定的规则,可以使用pyotp提供的方法生成一个随机秘钥

bash 复制代码
secret_key = pyotp.random_base32()  # S5MPVVK6TYBAYJTKEWW5UGDSC2NX6OPS

生成一个url,使用Google Authenticator扫描

python 复制代码
# 生成一个url,使用Google Authenticator扫描
print(totp.provisioning_uri(name='alice@google.com', issuer_name='Secure App'))
# otpauth://totp/Secure%20App:alice%40google.com?secret=S5MPVVK6TYBAYJTKEWW5UGDSC2NX6OPS&issuer=Secure%20App

比如使用https://cli.im/text 生成二维码如下

参考

相关推荐
codeejun1 分钟前
每日一Go-50、Go微服务--配置中心
开发语言·微服务·golang
极光代码工作室2 分钟前
基于数据挖掘的高校图书借阅分析系统
大数据·hadoop·python·数据分析·数据可视化
泽02023 分钟前
LLMChat ----- 通过C++语言调用大语言模型所实现的聊天系统
开发语言·c++·语言模型
蒸汽求职5 分钟前
告别静态文档:利用 Notion 搭建“交互式”简历的降维展示策略
开发语言·缓存·面试·职场和发展·金融·notion
steem_ding7 分钟前
C++ 回调函数详解
开发语言·c++·算法
会编程的土豆8 分钟前
字符串知识(LCS,LIS)区分总结归纳
开发语言·数据结构·c++·算法
rockmelodies9 分钟前
用 Python 实现 Docker 镜像批量推送(带进度条)
python·docker·eureka
2301_817672269 分钟前
如何在 HTML 中正确使用 exif-js 库读取图片 EXIF 元数据
jvm·数据库·python
Olafur_zbj9 分钟前
【python】PDF文件翻译
网络·python·pdf
FuckPatience9 分钟前
未能加载项目文件。名称不能以“<”字符(十六进制值 0x3C)开头
开发语言