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

参考

相关推荐
阿杜杜不是阿木木18 小时前
authentik开源身份认证与管理平台-介绍与安装(1)
数据库·redis·开源·authing·sso·authentik
csbysj202018 小时前
Vue.js 事件处理器
开发语言
Mr_Xuhhh18 小时前
JAVA SE重点
java·开发语言
沐知全栈开发18 小时前
Bootstrap4 轮播教程
开发语言
long_songs18 小时前
Python编程第03课:第一个Python程序 - Hello World深度解析
开发语言·python
deephub18 小时前
从零构建 Mini-vLLM:KV-Cache、动态批处理与分布式推理全流程
人工智能·python·深度学习·大语言模型·vllm
jwn99918 小时前
PHP vs 汇编:编程语言的两极对决
开发语言·汇编·php
生信研究猿18 小时前
leetcode 141.环形链表
python·leetcode·链表
池️鱼18 小时前
Lambda 表达式 —— Java 8 的函数式编程利器
java·开发语言
小碗羊肉18 小时前
【从零开始学Java | 第二十六篇】双列集合(Map)
java·开发语言