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 生成二维码如下

参考

相关推荐
陈天伟教授6 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
陈文锦丫6 小时前
MQ的学习
java·开发语言
2301_764441336 小时前
Aella Science Dataset Explorer 部署教程笔记
笔记·python·全文检索
爱笑的眼睛116 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
BoBoZz196 小时前
ExtractSelection 选择和提取数据集中的特定点,以及如何反转该选择
python·vtk·图形渲染·图形处理
liwulin05066 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
青蛙大侠公主7 小时前
Thread及其相关类
java·开发语言
爱吃大芒果7 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode
云栖梦泽7 小时前
易语言数据库操作:结构化数据管理的核心
开发语言
木头左7 小时前
LSTM量化交易策略中时间序列预测的关键输入参数分析与Python实现
人工智能·python·lstm