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

参考

相关推荐
MATLAB代码顾问1 分钟前
改进鲸鱼优化算法(IWOA)求解柔性作业车间调度问题(FJSP)——附MATLAB代码
开发语言·算法·matlab
阿维的博客日记2 分钟前
介绍一下Redisson的看门狗机制
java·redis·缓存
方也_arkling14 分钟前
【大模型】初步认识RAG
人工智能·python
庞轩px19 分钟前
第四篇:多级缓存架构——Caffeine + Redis + MySQL 三级协同
java·redis·mysql·读写分离·caffeine·本地缓存
阿里嘎多学长19 分钟前
2026-05-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
yqcoder23 分钟前
JavaScript 数据类型全景图:从基础到进阶
开发语言·javascript·ecmascript
rKWP8gKv731 分钟前
单例模式在Java中的7种实现:从懒汉式到静态内部类
java·开发语言·单例模式
x***r15133 分钟前
Redis-x64-3.2.100安装步骤详解(附Redis服务注册与配置)
redis
迁旭34 分钟前
prompt_toolkit 3.0.52 API 参考手册
python
WL_Aurora36 分钟前
Python 算法基础篇之堆和优先队列
python·算法