Python实现TOTP动态验证码和二维码生成的示例代码

 更新时间:2026年03月04日 09:32:50   作者:林九生  
在现代安全场景中,TOTP是一种广泛使用的双因素认证(2FA)机制,本文将介绍如何使用 Python 的 pyotp 和 qrcode 库来实现动态验证码的生成、验证以及二维码的创建,希望对大家有所帮助

在现代安全场景中,TOTP(基于时间的一次性密码)是一种广泛使用的双因素认证(2FA)机制,用于增强账户安全性。本文将介绍如何使用 Python 的 pyotpqrcode 库来实现动态验证码的生成、验证以及二维码的创建。

环境准备

在开始之前,请确保已安装以下库:

  • pyotp:用于生成和验证 TOTP。
  • qrcode:用于生成二维码。

使用以下命令安装依赖:

pip install pyotp qrcode

实现步骤

1. 生成密钥并创建二维码

我们需要首先生成一个密钥,然后利用该密钥创建一个包含 TOTP URI 的二维码。以下是实现代码:

import pyotp  # 导入 pyotp 库,用于生成和验证 TOTP
import qrcode  # 导入 qrcode 库,用于生成二维码

# 步骤 1:生成一个密钥
totp = pyotp.TOTP(pyotp.random_base32())  # 随机生成一个 Base32 格式的密钥,并创建 TOTP 对象
print("密钥:", totp.secret)  # 打印生成的密钥

# 步骤 2:生成二维码
# 根据密钥生成一个 TOTP URI,包含用户名和服务名称
uri = totp.provisioning_uri("example@domain.com", issuer_name="MyService")
print("URI:", uri)  # 打印生成的 URI

# 使用 qrcode 库生成二维码并保存为图片
qr = qrcode.make(uri)  # 将 URI 转换为二维码对象
qr.save("totp_qr.png")  # 将二维码保存为图片文件
print("二维码已保存为 totp_qr.png")  # 提示二维码已保存

二维码可以用谷歌身份验证器或类似工具扫描,来绑定账户。

2. 验证动态验证码

在绑定账户后,用户会定期生成一个 6 位动态验证码。以下代码展示如何通过密钥验证用户输入的验证码:

import pyotp  # 导入 pyotp 库,用于生成和验证 TOTP

# 从生成密钥的脚本中获取密钥(假设你知道密钥)
secret = input("请输入密钥:")  # 提示用户输入之前生成的密钥

totp = pyotp.TOTP(secret)  # 使用用户提供的密钥创建 TOTP 对象

# 步骤 2:验证 TOTP 密码
user_input = input("请输入验证码:")  # 提示用户输入当前显示的验证码
if totp.verify(user_input):  # 验证用户输入的验证码是否有效
    print("验证码正确!")  # 如果验证码匹配当前时间窗口,打印提示
else:
    print("验证码错误!")  # 如果不匹配,打印错误提示

核心逻辑解析

密钥生成pyotp.random_base32() 会生成一个符合 TOTP 标准的密钥。

TOTP URIprovisioning_uri 方法会生成一个标准的 URI,格式如下:

otpauth://totp/{服务名称}:{用户名}?secret={密钥}&issuer={服务名称}

二维码生成:使用 qrcode.make(uri) 将 URI 转换为二维码图像,可供用户扫描绑定。

动态验证码验证:调用 totp.verify(验证码) 方法验证用户输入是否匹配当前时间窗口的动态密码。

应用场景

双因素认证(2FA):通过密钥和动态验证码,提供一种额外的验证手段。

账户安全加固:即使密码泄露,攻击者也无法在没有 TOTP 验证的情况下访问账户。

二维码绑定:结合二维码,用户可以轻松通过扫描完成双因素认证的绑定。

注意事项

时间同步:由于 TOTP 基于时间窗口,确保服务器和客户端的时间保持同步非常重要。

密钥存储:请妥善保存密钥,避免泄露。

适配其他应用:本文生成的 URI 和二维码可以直接用于 Google Authenticator、Authy 等主流身份验证器。

总结

通过 pyotpqrcode,我们能够快速实现 TOTP 动态验证码的生成、验证和二维码绑定功能。这种方案简单高效,适用于多种需要双因素认证的场景。

到此这篇关于Python实现TOTP动态验证码和二维码生成的示例代码的文章就介绍到这了,更多相关Python生成动态验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python3利用Dlib19.7实现摄像头人脸识别的方法

    Python3利用Dlib19.7实现摄像头人脸识别的方法

    这篇文章主要介绍了Python 3 利用 Dlib 19.7 实现摄像头人脸识别 ,利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

    使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

    字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓的路径数据转换为直观的矢量图形,本文将带你一步步实现这一过程,并解析代码细节,帮助你理解如何将复杂的路径指令转化为可视化的字体形状
    2025-06-06
  • python深入讲解魔术方法

    python深入讲解魔术方法

    所谓魔法函数(Magic Methods),是Python的⼀种⾼级语法,允许你在类中⾃定义函数(函数名格式⼀般为__xx__),并绑定到类的特殊⽅法中。⽐如在类A中⾃定义__str__()函数,则在调⽤str(A())时,会⾃动调⽤__str__()函数,并返回相应的结果
    2022-06-06
  • Python图像处理之图像量化处理详解

    Python图像处理之图像量化处理详解

    这篇文章将介绍图像量化处理,即将图像像素点对应亮度的连续变化区间转换为单个特定值的过程。文中的示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • python实现TCPserver的使用示例

    python实现TCPserver的使用示例

    python实现TCPserver是一件简单的事情,只要通过socket这个模块就可以实现,本文就来介绍一下python实现TCPserver的使用示例,感兴趣的可以了解一下
    2023-10-10
  • Python Flask利用SocketIO库实现图表的绘制

    Python Flask利用SocketIO库实现图表的绘制

    这篇文章主要为大家详细介绍了Python Flask框架如何利用SocketIO库实现图表的绘制,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • Python中使用dom模块生成XML文件示例

    Python中使用dom模块生成XML文件示例

    这篇文章主要介绍了Python中使用dom模块生成XML文件示例,本文讲解了dom模块的主要方法、详细的代码实例,需要的朋友可以参考下
    2015-04-04
  • Python爬虫辅助利器PyQuery模块的安装使用攻略

    Python爬虫辅助利器PyQuery模块的安装使用攻略

    这篇文章主要介绍了Python爬虫辅助利器PyQuery模块的安装使用攻略,PyQuery可以方便地用来解析HTML内容,使其成为众多爬虫程序开发者的大爱,需要的朋友可以参考下
    2016-04-04
  • 使用pycharm设置控制台不换行的操作方法

    使用pycharm设置控制台不换行的操作方法

    今天小编就为大家分享一篇使用pycharm设置控制台不换行的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python使用socketServer包搭建简易服务器过程详解

    Python使用socketServer包搭建简易服务器过程详解

    这篇文章主要介绍了Python使用socketServer包搭建简易服务器过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论