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

参考

相关推荐
Polar__Star几秒前
Go语言怎么做自动补全_Go语言CLI自动补全教程【经典】
jvm·数据库·python
ID_18007905473几秒前
京东商品详情 API 数据分析业务场景 + JSON 返回参考
java·开发语言
周杰伦fans几秒前
C# CAD二次开发:RotatedDimension 旋转标注完全指南
开发语言·c#
qq_424098561 分钟前
CSS如何去掉数字输入框的默认微调按钮_利用---webkit-inner-spin-button
jvm·数据库·python
Full Stack Developme1 分钟前
Hutool File 教程
linux·windows·python
weixin_458580122 分钟前
HTML怎么提升首屏加载_HTML关键资源内联策略【说明】
jvm·数据库·python
郝学胜-神的一滴3 分钟前
Python魔法函数深度探索|从工具实操到核心应用,解锁语言底层的优雅密码
开发语言·数据库·人工智能·python·pycharm
m0_640309304 分钟前
MongoDB广告点击追踪如何建模_点击事件聚合与去重记录
jvm·数据库·python
她说彩礼65万5 分钟前
C语言 函数指针
c语言·开发语言·算法
m0_674294646 分钟前
如何在 SciPy 中实现 NumPy 数组的重叠拼接与平均融合
jvm·数据库·python