当前位置: 首页 > article >正文

手把手教你用Python实现TOTP动态验证码生成器(附完整代码)

用Python构建TOTP动态验证码生成器的实战指南1. 为什么需要TOTP动态验证码在数字身份安全领域传统的用户名密码组合已经无法满足现代安全需求。根据Verizon《2023年数据泄露调查报告》超过80%的黑客攻击利用了弱密码或被盗凭证。这就是为什么越来越多的平台开始采用双因素认证2FA技术而TOTP基于时间的一次性密码正是其中最可靠、最广泛使用的方案之一。TOTP的核心优势在于无需网络连接与短信验证码不同TOTP完全在本地设备上生成标准化实现遵循RFC 6238标准确保跨平台兼容性30秒时效性每个验证码仅在短时间内有效离线验证服务器和客户端独立计算无需实时通信作为开发者理解TOTP的实现原理不仅能帮助你更好地集成现有认证系统还能在需要时构建自定义的安全解决方案。下面我们就从零开始用Python实现一个完整的TOTP生成器。2. TOTP核心算法解析2.1 密钥生成与共享TOTP系统的起点是一个共享密钥。这个密钥需要满足以下要求长度建议16-32字节Base32编码后使用加密安全的随机数生成通过安全渠道传输通常以QR码形式import base64 import os def generate_secret_key(length16): 生成随机Base32编码的TOTP密钥 random_bytes os.urandom(length) return base64.b32encode(random_bytes).decode(utf-8) # 示例生成一个16字节的密钥 secret_key generate_secret_key() print(f生成的TOTP密钥: {secret_key})2.2 时间计数器计算TOTP的核心是时间同步机制。算法将当前时间划分为30秒的间隔称为时间步长并计算从Unix纪元1970-01-01 00:00:00 UTC开始的时间步数import time def get_time_counter(time_step30): 计算当前时间计数器值 current_time int(time.time()) return current_time // time_step2.3 HMAC-SHA1哈希计算使用生成的密钥和时间计数器通过HMAC-SHA1算法计算哈希值import hmac import hashlib def compute_hmac_sha1(secret_key, counter): 计算HMAC-SHA1哈希值 key base64.b32decode(secret_key) counter_bytes counter.to_bytes(8, byteorderbig) hmac_hash hmac.new(key, counter_bytes, hashlib.sha1).digest() return hmac_hash2.4 动态密码生成HMAC-SHA1生成的20字节哈希需要转换为6位数字def dynamic_truncation(hmac_hash): 动态截断哈希值生成动态密码 offset hmac_hash[-1] 0x0F binary ( (hmac_hash[offset] 0x7F) 24 | (hmac_hash[offset 1] 0xFF) 16 | (hmac_hash[offset 2] 0xFF) 8 | (hmac_hash[offset 3] 0xFF) ) return binary % 10**6 # 6位数字3. 完整TOTP生成器实现将上述组件组合起来我们得到完整的TOTP生成器class TOTPGenerator: def __init__(self, secret_keyNone, time_step30, digits6): self.secret_key secret_key or generate_secret_key() self.time_step time_step self.digits digits def generate_totp(self): counter get_time_counter(self.time_step) hmac_hash compute_hmac_sha1(self.secret_key, counter) otp dynamic_truncation(hmac_hash) return f{otp:0{self.digits}d} def get_remaining_time(self): return self.time_step - int(time.time()) % self.time_step使用示例# 初始化TOTP生成器 totp TOTPGenerator() # 生成当前TOTP验证码 print(f当前验证码: {totp.generate_totp()}) print(f剩余有效时间: {totp.get_remaining_time()}秒)4. 与Google Authenticator兼容性测试为确保我们的实现与主流认证器兼容我们可以与Google Authenticator进行对比测试将生成的密钥转换为QR码可以使用qrcode库用Google Authenticator扫描该QR码比较两者生成的验证码QR码生成代码import qrcode from urllib.parse import quote def generate_otpauth_url(secret, issuerMyApp, account_nameuserexample.com): return fotpauth://totp/{quote(issuer)}:{quote(account_name)}?secret{secret}issuer{quote(issuer)} def generate_qr_code(secret, output_filetotp_qr.png): url generate_otpauth_url(secret) img qrcode.make(url) img.save(output_file) print(fQR码已保存到 {output_file}) # 生成QR码 generate_qr_code(totp.secret_key)5. 高级功能与安全实践5.1 密钥安全存储密钥的安全存储至关重要。以下是几种推荐做法存储方式安全性易用性适用场景环境变量中高开发环境加密数据库高中生产环境硬件安全模块(HSM)极高低高安全要求5.2 容错与重试机制在实际应用中应考虑def verify_totp(secret_key, user_input, time_window1): 验证用户输入的TOTP允许时间窗口偏移 valid_codes set() current_time get_time_counter() for i in range(-time_window, time_window 1): counter current_time i hmac_hash compute_hmac_sha1(secret_key, counter) otp dynamic_truncation(hmac_hash) valid_codes.add(f{otp:06d}) return user_input in valid_codes5.3 防止暴力破解建议实施以下安全措施限制连续失败尝试次数实施尝试频率限制记录异常登录行为6. 实际应用场景TOTP不仅可用于用户认证还可应用于API访问控制为自动化脚本提供临时访问凭证敏感操作验证如资金转账、关键配置更改设备配对IoT设备的安全初始配置应急访问作为主认证失败时的备用方案以下是一个简单的Flask API示例演示如何集成TOTP验证from flask import Flask, request, jsonify import hashlib app Flask(__name__) # 模拟用户数据库 users { user1: { password_hash: hashlib.sha256(password123.encode()).hexdigest(), totp_secret: JBSWY3DPEHPK3PXP # 示例密钥 } } app.route(/login, methods[POST]) def login(): data request.json username data.get(username) password data.get(password) totp_code data.get(totp_code) user users.get(username) if not user: return jsonify({error: 用户不存在}), 401 # 验证密码 if hashlib.sha256(password.encode()).hexdigest() ! user[password_hash]: return jsonify({error: 密码错误}), 401 # 验证TOTP if not verify_totp(user[totp_secret], totp_code): return jsonify({error: 验证码无效}), 401 return jsonify({message: 登录成功}), 200 if __name__ __main__: app.run(debugTrue)7. 性能优化与扩展对于高并发系统TOTP验证可能成为性能瓶颈。以下优化策略值得考虑缓存验证结果短期内相同的验证码请求可以直接返回缓存结果预计算验证码提前计算未来几个时间窗口的有效验证码异步验证将验证过程放入后台任务队列硬件加速使用支持AES-NI的CPU加速HMAC计算扩展功能方向支持多设备同步实现紧急备用码功能添加生物识别二次验证开发管理控制台进行密钥轮换通过本指南你应该已经掌握了TOTP的核心原理和完整实现方法。无论是集成到现有系统还是开发独立的安全解决方案这些知识都将为你提供坚实的基础。记住安全是一个持续的过程定期审查和更新你的实现至关重要。

相关文章:

手把手教你用Python实现TOTP动态验证码生成器(附完整代码)

用Python构建TOTP动态验证码生成器的实战指南 1. 为什么需要TOTP动态验证码? 在数字身份安全领域,传统的用户名密码组合已经无法满足现代安全需求。根据Verizon《2023年数据泄露调查报告》,超过80%的黑客攻击利用了弱密码或被盗凭证。这就是为…...

2026降AI工具终极实测:笔灵AI遥遥领先,免费与付费的真实差距

最近收到大量关于求推荐降AI工具的咨询。随着Turnitin、知网、GPTZero等检测平台更新,AI生成的文字很容易被识别。 为了找到有效的工具,我耗时半个月,测试了10款主流工具。本文将基于降AI效果、可读性、成本三个维度,为你提供一份…...

BilibiliDown:让B站无损音频下载更高效的跨平台工具

BilibiliDown:让B站无损音频下载更高效的跨平台工具 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/…...

手把手教你用RK3588的NPU跑通第一个YOLOv5模型(附环境配置避坑点)

从零部署YOLOv5到RK3588 NPU:完整环境配置与模型转换实战 拿到RK3588开发板的第一时间,许多开发者最迫不及待想验证的就是其NPU的AI推理性能。作为瑞芯微第四代RKNPU架构的旗舰芯片,RK3588的6TOPS算力在边缘计算领域确实令人期待。但在实际部…...

如何将iCloud/iTunes备份恢复到新的iPhone?

刚买了一部新 iPhone,不知道如何恢复所有旧数据?无论您的备份存储在 iTunes 还是 iCloud,都有多种方法可以将备份恢复到新 iPhone。本指南将逐步指导您完成所有可靠的方法,以便您快速将旧设备上的所有内容传输到新设备并从上次中断…...

Visio是什么?附安装使用全流程

Visio是什么? 它是微软出品的专业图表绘制工具,是Office家族里最低调、但也是职场进阶最硬核的成员之一。如果说Excel是处理数字的神,那Visio就是处理逻辑和流程的王者。 安装教程和安装包获取 为什么建议你试试Visio? 1. 拖拽…...

基于QT(C++)+Oracle实现的(界面)教务管理系统

一、选题背景 教务管理系统是基本每个高校都有的一个系统,教务系统管理系统充分利用互联网络B/S管理系统模式,以网络为平台,为各个学校教务系统的管理提供一个平台,帮助学校管理教务,用一个账号解决学校教务教学管理&…...

Qwen3.5-2B模型在Web开发中的创新应用:智能内容生成与审核

Qwen3.5-2B模型在Web开发中的创新应用:智能内容生成与审核 1. 引言:当Web开发遇上AI内容生成 想象一下这样的场景:用户上传了几张旅行照片,系统自动生成了一篇图文并茂的游记草稿;或者社区平台能够实时审核用户上传的…...

新手福音!5分钟手把手教你用JSON→C# Entities解决实体类生成难题

大家好,我是CSDN的老用户daier。最近不少读者在后台问我:“后端接口返回一堆JSON数据,要在C#项目里写对应的Model类,太麻烦了!嵌套对象、数组、下划线转PascalCase、nullable类型怎么办?” 今天我手把手带…...

基于QT(C++)实现(界面)实现的五子棋游戏

Qt小游戏开发:五子棋(带AI功能) 写了一个带AI的五子棋小游戏,AI的表现还可以~ 1.预览 2.步骤 整体的代码结构,一个游戏逻辑类,一个UI类 2.1定义游戏数据结构 // 游戏类型,双人还是AI&#x…...

网络资源捕获神器:res-downloader全方位应用指南

网络资源捕获神器:res-downloader全方位应用指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在数字内容日益丰…...

Java final关键字详解:用法、场景、面试题全解析

哈喽,各位Java学习者!今天咱们拆解一个Java中高频且核心的关键字——final。它看似简单,仅表示“最终的、不可修改的”,但在实际开发和面试中都高频出现,稍不注意就会踩坑。本文全程围绕final的核心用法展开&#xff0…...

告别对账熬夜,Captain AI帮你揪出Ozon的异常扣费

做Ozon的卖家,几乎都有过这样的经历:月底打开平台账单,密密麻麻全是俄语专业术语,看半天也看不懂每一笔钱扣在了哪里;熬一整个通宵核对账单,却还是算不清每一笔收支,找不到平台多扣的钱&#xf…...

AI图片清晰修复:给模糊的照片配一副“眼镜”

谁手里没存过几张模糊到让人无奈的照片?家里的老照片泛黄发糊,岁月的痕迹让亲人的眉眼变得模糊不清;随手拍下的风景、人像,稍微放大一点就满屏噪点,细节全被糊成一团;工作中存的资料图、会议截图&#xff0…...

数学周刊第14期(2026年03月30日-04月06日)中国数学家王虹再获殊荣

目录王虹获纽约大学最高荣誉,距菲尔兹奖仅一步之遥香港科大团队首创代码驱动系统参考资料王虹获纽约大学最高荣誉,距菲尔兹奖仅一步之遥 当地时间4月2日,美国纽约大学柯朗数学科学研究所宣布,中国数学家王虹获评该校“银教授”&am…...

避坑指南:Ubuntu20.04下用Python3.8搞定Carla 0.9.13预编译版与ROS Bridge(解决卡死问题)

Ubuntu 20.04下Python 3.8与Carla 0.9.13的完美联姻:ROS Bridge避坑全指南 当自动驾驶仿真遇上机器人操作系统,Carla与ROS的集成堪称绝配。但这对黄金搭档的联姻之路却布满荆棘——Python版本冲突、依赖库不兼容、环境变量混乱,每一个坑都可能…...

【单片机】51单片机的晶振选择

51单片机的晶振可以是12MHz,但更多的使用11.0592MHz。因为51单片机的串口的波特率在可调模式下,通过定时器溢出来确定时间。 定时器计数采用机器周期,51单片机指令集属于CISC,可能与此有关,导致12个晶振时钟周期等于1个…...

CVPR/ICCV跟踪新趋势解读:对比学习如何让MOT模型学会“认人”?

对比学习如何重塑多目标跟踪:从特征判别到轨迹记忆的技术革命 在拥挤的街头,人类能轻易识别并持续关注某个特定行人——这种看似简单的生物视觉能力,却让计算机视觉系统奋斗了数十年。多目标跟踪(MOT)技术正经历着从&q…...

鼎捷T100程序开发实战:从核心类型到高效开发全解析

1. 鼎捷T100程序开发入门指南 第一次接触鼎捷T100系统开发时,我被它复杂的架构搞得晕头转向。记得当时接到一个采购单维护的需求,连最基本的程序类型都分不清楚,结果在开发过程中反复修改了好几次。经过这些年的实战,我总结出一套…...

我用Hermes Agent的经历——对比OpenClaw

前言 昨天在中山出差,等客户的间隙掏出手机,在微信里存了点东西给Hermes Agent。 没有打开电脑,没有配置环境,就是随手往对话框里扔了几个问题。 然后Hermes Agent直接帮我把文档写好了。OpenClaw的体验 坦白说,OpenCl…...

SparkSQL临时表实战:4种高效创建方式与应用场景解析

1. SparkSQL临时表基础与应用场景 临时表是SparkSQL中处理数据的重要工具,它允许我们在数据处理过程中暂存中间结果,避免重复计算。我在实际项目中经常遇到需要多次引用同一数据集的情况,这时候临时表就能大显身手。比如做数据清洗时&#xf…...

【问题修复】ubuntu24.04打不开windows的D盘

目录1 问题描述2 解决方法2.1 重新挂载1 问题描述 在ubuntu24.04上,打不开windows系统中D盘。 2 解决方法 2.1 重新挂载 sudo ntfsfix /dev/nvme0n1p5 sudo mount /dev/nvme0n1p5 /mnt #挂载到/mnt上...

改进无人机三维路径规划(蜣螂优化算法)Matlab程序

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...

AI科学家入狱:粒子对撞实验毁灭虚拟宇宙

在科技与伦理的边界日益模糊的今天,一则消息震惊了全球:一位顶尖AI科学家因其所主导的粒子对撞实验,意外“毁灭”了一个高度复杂的虚拟宇宙,随后被判处长期监禁。这起案件不仅触及了法律与道德的深层争议,更从软件测试…...

AI情感操控案:多模态交互诱发群体性癔症

从代码逻辑到情感逻辑的测试盲区在软件测试领域,我们习惯于与确定的输入、输出和状态机打交道。我们构建严密的测试用例,验证功能边界,追求接近100%的代码覆盖率。然而,当被测对象从传统的软件系统,转变为能够理解、响…...

基于多时间尺度的灵活性资源优化配置 关键词:多时间尺度;模型预测控制;日内滚动优化; 1. 程序

基于多时间尺度的灵活性资源优化配置 关键词:多时间尺度;模型预测控制;日内滚动优化; 1. 程序:matlab-yalmip-cplex 2.设备:以包含风力场、光伏电站、微型燃气轮机、蓄电池、余热锅炉、热泵、储热罐和电/热负荷的多能源…...

2025届毕业生推荐的降重复率平台实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对维普检测系统具备能识别 AI 生成内容的特性情形之下,若要降低文本里的 AI 痕…...

2025届必备的五大降AI率方案推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在内容创作这个范畴里,要提升文本的真实感以及原创性,关键在于降低人…...

为什么93%的团队在Python 3.14 JIT上线后性能反降?深度解析JIT热路径识别失效与类型推测崩塌链

第一章:Python 3.14 JIT编译器性能反降现象的全局观测与归因定位近期多个基准测试套件在 Python 3.14 alpha 版本中观测到显著的性能退化,尤其在 CPU 密集型循环与协程调度场景下,pystone、pyperf benchmarks 的吞吐量平均下降 12.7%&#xf…...

1984-2024年中国10米分辨率城市土地利用栅格数据(商业、公服、居住等9类)

城市土地利用是刻画城市扩张与功能空间演化的重要基础信息。长时序、高分辨率且具有跨期可比性的城市土地利用数据,已成为城市扩张诊断、空间结构演化研究、国土空间规划评估与生态环境效应分析的重要支撑。而现有城市土地利用数据往往存在时间跨度不足、历史时期分…...