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

python passlib

# 聊聊 Python 里的密码管理工具Passlib在 Python 项目里处理用户密码是件需要格外小心的事。密码不能明文存储得加密但加密的方式又有很多种选错了或者用错了都可能留下安全隐患。这些年见过不少项目自己手写密码哈希逻辑用 MD5、SHA1甚至直接 base64 编码就存数据库了这其实挺危险的。后来大家开始用bcrypt、scrypt或者argon2这些专门为密码设计的哈希算法安全性是上去了但用起来又有点繁琐不同算法接口还不一样。这时候passlib这个库就出现了。它有点像是一个密码哈希的“瑞士军刀”把各种常见、安全的密码哈希算法都封装了起来提供了一套统一的、简单的接口。你不用关心底层用的是bcrypt还是argon2passlib帮你处理了那些细节你只需要告诉它“用当前最推荐的方式处理密码”就行。它到底是什么简单说passlib是一个 Python 库专门用来做密码的哈希和验证。但它不是一个算法而是一个“管理器”或者“适配层”。它自己并不发明新的加密算法而是把那些经过密码学社区验证、专门为密码存储设计的算法比如bcrypt,PBKDF2,scrypt,argon2收集起来用一套清晰、一致的 Python API 暴露给开发者。它的核心思想是“算法无关性”和“向前兼容”。你写的代码不需要绑定到某个特定的哈希算法上。今天你可能用bcrypt明天发现argon2更安全或者硬件条件变了想换算法用passlib的话改动会非常小甚至对于已有的用户密码它还能无缝地支持验证和升级。它能解决什么问题想象一下你管理着一个社区的钥匙柜。最早的钥匙密码只是简单挂在钩子上MD5哈希很不安全。后来你换了个高级保险箱bcrypt新钥匙都放进去。但问题来了老钥匙还能用吗新保险箱的操作和老钩子完全不一样你得写两套不同的检查流程。更麻烦的是过两年可能又出了更坚固的保险箱argon2难道要再写第三套passlib就像是给你配了一个智能的钥匙管家。你把钥匙给它它自动判断这是老钩子上的还是旧保险箱里的然后用自己的方式去验证。对于新钥匙它会用你当前设置的最好的保险箱算法来存放。当你想全面升级保险箱时这个管家还能在用户下次登录验证成功时悄悄地把他的钥匙从旧保险箱转移到新保险箱里。整个过程你开发者和用户都几乎无感。具体来说它能哈希密码将用户注册或修改密码时输入的明文密码转换成安全的哈希值用于存储。验证密码当用户登录时将其输入的密码与数据库存储的哈希值进行比对。管理哈希策略让你可以轻松定义和更换项目使用的哈希算法。迁移哈希在后台自动将老旧的、强度不够的哈希值升级为新的、更安全的哈希值。怎么把它用起来使用passlib非常直观。首先得安装通常用 pip 就行pip install passlib。它有一些算法依赖外部 C 扩展比如bcrypt如果安装有问题文档里通常有解决办法比如安装操作系统对应的开发工具链。来看一个最简单的例子。假设我们正在处理用户注册和登录。frompasslib.hashimportpbkdf2_sha256# 创建一个哈希器我们这里先用 PBKDF2 算法举例hasherpbkdf2_sha256# 用户注册时哈希他的密码user_passwordmy_secure_password_123password_hashhasher.hash(user_password)# 得到的 password_hash 是一串像这样的字符串可以存入数据库# $pbkdf2-sha256$29000$...# 用户登录时验证密码input_passworduser_input_password# 下面这行就是验证将输入密码和存储的哈希值比对is_correcthasher.verify(input_password,password_hash)# 如果输入正确is_correct 就是 True否则是 False这已经能工作了但还没体现出passlib的真正优势。更常见的做法是使用它的CryptContext。这才是它的“大脑”让你能集中管理所有密码策略。frompasslib.contextimportCryptContext# 定义一个密码上下文。这里说首选 argon2如果没有用 bcrypt 也行。# 同时我们还能接受用 md5_crypt 生成的旧哈希为了兼容老用户但标记为废弃。pwd_contextCryptContext(schemes[argon2,bcrypt,md5_crypt],deprecated[md5_crypt],# 标记 md5_crypt 为过时的argon2__memory_cost102400,# 可以给特定算法调参数bcrypt__rounds14,)# 哈希密码hash_for_dbpwd_context.hash(new_password)# 验证密码自动识别哈希用的是哪个算法resultpwd_context.verify(input_password,hash_for_db)# 检查一个现有哈希是否需要升级比如它是用被标记为 deprecated 的 md5_crypt 生成的needs_updatepwd_context.needs_update(hash_for_db)ifresultandneeds_update:# 如果验证成功且需要升级就重新哈希一次新的哈希会用列表里第一个最推荐的算法new_hashpwd_context.hash(input_password)# 然后用这个 new_hash 更新数据库中的旧记录这个CryptContext的配置可以放在项目配置文件中整个应用只用这一个上下文对象非常清晰。一些值得注意的实践细节首先算法选择很重要。passlib支持很多算法但别瞎选。对于新项目无脑选argon2通过passlib.hash.argon2通常是当前的最佳实践。如果系统环境不支持比如某些共享主机bcrypt是经过时间检验的、非常可靠的次优选择。PBKDF2因为各种标准都支持在需要 FIPS 认证等合规场景下也有用武之地。绝对不要再使用md5、sha1或普通的sha256这类通用哈希函数来存密码。其次关于配置参数。像bcrypt的rounds工作因子、argon2的memory_cost内存消耗这些参数决定了哈希过程的计算强度。强度越高抗暴力破解能力越强但验证耗时也越长。这里的诀窍是在用户可容忍的延迟内比如几百毫秒把强度拉到当前硬件条件允许的最高值。passlib的默认值通常比较保守可能几年后就不够安全了所以最好根据自己服务器的性能稍微调高一点并计划好未来再次调整的策略。然后是哈希迁移。这是passlib一个非常优雅的功能。如果你的数据库里已经有一批用弱算法比如md5哈希的密码直接全部作废让用户重置是不现实的。利用CryptContext的deprecated参数和needs_update方法可以在用户下次成功登录时“静默”地将他的密码哈希升级到新算法。这个过程对用户透明安全也逐步得到了提升。最后存储哈希值。passlib生成的哈希字符串是自描述的里面包含了算法标识、参数和盐值你直接把它作为一个完整的字符串字段比如VARCHAR(255)存到数据库里就行不需要自己分开存盐和算法信息。验证时直接把整个字符串传给verify方法passlib自己能解析。和别的工具比怎么样在 Python 的世界里处理密码哈希的库不止一个。每个都有自己适用的场景。最直接的竞争对手可能是各个算法独立的库比如bcrypt、argon2-cffi。如果你非常确定整个项目的生命周期内都只用一种算法并且不需要考虑迁移那么直接用这些单一算法的库也没问题可能还更轻量。但一旦有更换算法或者兼容旧哈希的需求你就得自己写很多胶水代码而passlib的价值就在这里体现出来了。另一个常见的对比是 Django 等 Web 框架内置的密码工具。Django 的django.contrib.auth.hashers模块其实和passlib的设计思想非常像也支持多算法和迁移。如果你在用 Django直接用它的就挺好集成度更高。但如果你用的是 Flask、FastAPI 或其他非 Django 框架或者你在写一个非 Web 的应用程序比如命令行工具、桌面应用那么passlib就是一个框架无关的、更通用的优秀选择。还有一些更底层的密码学库比如cryptography。它非常强大和全面但它是“原材料”。用cryptography来哈希密码就像用机床和钢材去造一个螺丝刀当然能造出来但你需要自己设计螺丝刀的形状、尺寸确保它好用不伤手。而passlib是直接给你一把已经造好的、符合人体工学的螺丝刀。总的来说passlib的定位非常精准它不做底层密码学也不绑定任何应用框架。它专注于解决“应用层密码哈希”这个特定问题通过提供抽象层和良好的默认配置让开发者能更轻松、更正确地完成这项工作。在追求安全性和可维护性的项目中花一点时间了解和使用它通常是值得的。

相关文章:

python passlib

# 聊聊 Python 里的密码管理工具:Passlib 在 Python 项目里处理用户密码,是件需要格外小心的事。密码不能明文存储,得加密,但加密的方式又有很多种,选错了或者用错了,都可能留下安全隐患。这些年&#xff0…...

从天气预报到视频预测:ConvLSTM实战项目入门(附PyTorch完整代码)

从天气预报到视频预测:ConvLSTM实战项目入门(附PyTorch完整代码) 当我们需要预测未来几小时的降雨量,或是推断视频下一帧的画面时,传统方法往往捉襟见肘。ConvLSTM的出现,为这类时空序列预测问题提供了全新…...

从图像模糊到语音识别:卷积在AI中的实战应用与Python代码示例

从图像模糊到语音识别:卷积在AI中的实战应用与Python代码示例 卷积运算在人工智能领域扮演着至关重要的角色,它不仅是计算机视觉和语音处理的基础,更是现代深度学习架构的核心组件。对于希望将理论知识转化为实际应用的开发者而言&#xff0c…...

高德/百度地图API实战:如何用AOI数据给你的POI打上“商圈”标签?

高德/百度地图API实战:如何用AOI数据为POI智能标注商圈标签? 在本地生活服务领域,精准的商圈划分直接影响着用户推荐效果和商业决策质量。想象一下,当用户搜索"附近网红餐厅"时,系统如果能基于商圈维度而非简…...

告别‘线束丛林’:一文看懂车身域控制器如何简化你的爱车‘神经系统’

告别‘线束丛林’:一文看懂车身域控制器如何简化你的爱车‘神经系统’ 想象一下打开一辆传统汽车的引擎盖或车门内饰板,映入眼帘的是密密麻麻如同蜘蛛网般的线束。这些错综复杂的电线不仅增加了整车重量,更成为故障排查的噩梦。而车身域控制…...

建议收藏|2026 版:35 岁程序员转型大模型 AI,完整路线 + 岗位拆解

当人工智能(AI)全面从技术验证走向规模化产业落地,从通用大模型的深度交互、多模态智能生成,到自动驾驶的持续迭代、工业场景的智能质检,再到医疗 AI 精准诊断、金融大模型智能风控与投研分析,这股技术浪潮…...

5分钟快速上手:xrdp开源远程桌面服务器完整配置指南

5分钟快速上手:xrdp开源远程桌面服务器完整配置指南 【免费下载链接】xrdp xrdp: an open source RDP server 项目地址: https://gitcode.com/gh_mirrors/xrd/xrdp 你是否需要在Linux服务器上搭建一个稳定高效的远程桌面环境?xrdp作为一款开源的R…...

零成本构建移动服务器:基于Termux的安卓Web服务实战

1. 为什么选择安卓手机搭建Web服务器? 最近几年,我发现身边不少开发者朋友都在寻找低成本的服务器解决方案。作为一个常年折腾各种技术的"老司机",我强烈推荐大家试试用闲置安卓手机搭建Web服务器。你可能要问:手机也能…...

从模组混乱到游戏秩序:Scarab如何重塑《空洞骑士》的模组体验

从模组混乱到游戏秩序:Scarab如何重塑《空洞骑士》的模组体验 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还记得第一次为《空洞骑士》安装模组时的迷茫吗&…...

保姆级教程:用STM32CubeIDE搞定STM32F407的USB虚拟串口(CDC)通信与速度测试

STM32F407 USB CDC通信实战:从零构建高速串口通道 引言 在嵌入式开发领域,可靠的数据传输始终是核心需求。传统UART串口受限于115200bps的速率天花板,而USB CDC(Communication Device Class)技术则为我们打开了高速通信…...

手把手教你用ZCU102和ADRV9009搭建无线测试平台(从SD卡制作到IIO Oscilloscope频谱观测)

手把手教你用ZCU102和ADRV9009搭建无线测试平台(从SD卡制作到IIO Oscilloscope频谱观测) 在无线通信系统开发中,快速搭建可靠的测试环境是验证设计性能的关键第一步。本文将带您从零开始,使用Xilinx ZCU102开发板和ADI ADRV9009射…...

别再乱选TVS管了!手把手教你根据USB 3.0 Type-C接口特性搞定选型(附参数对照表)

USB 3.0 Type-C接口TVS防护选型实战指南 当Type-C接口遇到静电放电(ESD)或浪涌冲击时,TVS管的选择直接决定了设备能否安然无恙。不少工程师在选型时容易陷入"参数越多越好"的误区,结果要么防护不足导致接口损坏&#xf…...

盛合晶微科创板上市,开盘市值近1858亿,无锡国资投资回报率超600%

盛合晶微上市:募资50.28亿,市值飙升至1418亿4月21日,集成电路晶圆级先进封测企业盛合晶微半导体有限公司在上交所科创板挂牌,发行价19.68元,预计募资总额约50.28亿元。上市首日,盛合晶微开盘大涨406.71%报9…...

告别“黑盒”:用Vector Davinci工具链手把手配置你的第一个AUTOSAR SWC

从零构建AUTOSAR车窗控制器:Vector Davinci工具链实战指南 第一次打开Vector Davinci Configurator时,满屏的AUTOSAR术语让人仿佛面对着一堵密不透风的技术高墙。作为在汽车电子行业深耕多年的工程师,我完全理解这种手足无措的感觉——AUTOSA…...

中国无人驾驶出海新地:新加坡成跳板,Robotaxi等多模式落地待拓展东盟市场

【导语:东南亚正成为中国无人驾驶出海新地,新加坡被视为有力跳板。4月,新加坡榜鹅无人驾驶三条路线全面开放,背后均有中国Robotaxi企业身影,其落地模式、面临挑战及未来规划值得关注。】新加坡无人驾驶路线开放&#x…...

终极指南:如何用NSC_BUILDER一站式管理你的Switch游戏库

终极指南:如何用NSC_BUILDER一站式管理你的Switch游戏库 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encryp…...

实战指南:如何在CIFAR-100-LT上使用LDAM Loss提升长尾分类效果(附代码)

实战指南:如何在CIFAR-100-LT上使用LDAM Loss提升长尾分类效果(附代码) 当面对CIFAR-100-LT这样的长尾分布数据集时,传统的交叉熵损失往往会偏向头部类别,导致模型在尾部类别上的表现不佳。LDAM Loss(Label…...

BitNet b1.58-2B-4T-GGUF开发者案例:基于Gradio+llama-server构建私有AI对话平台

BitNet b1.58-2B-4T-GGUF开发者案例:基于Gradiollama-server构建私有AI对话平台 1. 项目概述 BitNet b1.58-2B-4T-GGUF是一款极致高效的1.58-bit量化开源大模型,采用独特的权重三值化技术(-1, 0, 1),平均仅需1.58bit…...

Jmeter 安装教程:一看就会

随着互联网的不断发展,网站和应用程序的性能测试 变得越来越重要。Apache JMeter 是一款广泛使用的性能测试工具,它强大且使用广泛,适用于各种性能测试需求。不论你是刚刚接触性能测试的新手,还是一位有经验的测试工程师&#xff…...

飞剪测试程序——西门子博图V16版仿真模拟教程,适用于初学者掌握切纸机及包装机旋切技术

飞剪测试程序,仿真模拟,比较实用,适合初学者 使用西门子博图V16版本 用于旋切机包装机切纸机等 !飞剪机械臂工作场景 飞剪测试程序,仿真模拟,比较实用,适合初学者 使用西门子博图V16版本 用于旋切机包装机…...

告别on message!用Vector CAPL的ChkStart函数精准检查CAN报文周期(附完整代码)

告别on message!用Vector CAPL的ChkStart函数精准检查CAN报文周期(附完整代码) 在汽车电子测试领域,CAN总线报文的周期稳定性直接关系到整车系统的协调性。传统on message事件处理方式虽然简单直接,但随着测试用例复杂…...

如何用AI大模型技术一键批量生成和发布短视频?MoneyPrinterPlus全攻略

如何用AI大模型技术一键批量生成和发布短视频?MoneyPrinterPlus全攻略 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhispe…...

保姆级避坑指南:在ROS Noetic上搞定aruco_ros编译与单目相机定位(解决CV_FILLED报错)

ROS Noetic实战:从CV_FILLED报错到单目ARUCO定位全流程解析 刚接触ROS的开发者经常会遇到一个尴尬场景:按照网上教程一步步操作,却在编译阶段卡在某个看似简单的报错上。最近在Noetic环境下配置aruco_ros时,我就被CV_FILLED这个错…...

快速预览Office文档终极指南:无需安装Microsoft Office的轻量级解决方案

快速预览Office文档终极指南:无需安装Microsoft Office的轻量级解决方案 【免费下载链接】QuickLook.Plugin.OfficeViewer Word, Excel, and PowerPoint plugin for QuickLook. 项目地址: https://gitcode.com/gh_mirrors/qu/QuickLook.Plugin.OfficeViewer …...

从空调到无人机:PID控制算法在生活里的10个隐藏应用,看完你也是半个专家

从空调到无人机:PID控制算法在生活里的10个隐藏应用 清晨醒来,卧室温度始终保持在舒适的24℃;开车上班时,车速自动锁定在设定的60km/h;午休时咖啡机精准将水温控制在92℃——这些看似简单的稳定状态背后,都…...

AMD锐龙+A320主板装Win7,我踩过的那些坑和最终解决方案(保姆级避坑指南)

AMD锐龙A320主板安装Win7全攻略:从蓝屏到完美运行的实战手册 当AMD锐龙处理器遇上A320主板,再搭配Windows 7系统,这个看似简单的组合却成了无数技术爱好者的噩梦。作为一名经历过无数次蓝屏、黑屏和自动重启的"踩坑专业户"&#xf…...

深入Canfestival定时器内核:手把手解析TimeDispatch函数与STM32 HAL库适配

深入Canfestival定时器内核:手把手解析TimeDispatch函数与STM32 HAL库适配 在工业自动化与嵌入式通信领域,Canfestival作为轻量级CANopen协议栈,其定时器机制直接影响着心跳报文、PDO同步等关键功能的精度。许多开发者在STM32平台上移植时&am…...

C#调用本地大模型推理速度翻倍实录(.NET 11 JIT-AI协同编译深度拆解)

第一章:C#调用本地大模型推理速度翻倍实录(.NET 11 JIT-AI协同编译深度拆解).NET 11 引入的 JIT-AI 协同编译机制,首次将运行时类型推断、图结构感知与模型层语义嵌入融合进 IL 编译流水线,使 C# 调用 llama.cpp 或 Ol…...

组合导航 | 双目视觉 + 激光雷达 + NRTK的三融合方案

文章目录 🧭 三大传感器分工:各司其职,优势互补 🔗 技术协同:如何实现“1+1+1>3”? 🎯 应用优势:为什么需要三者融合? 双目视觉、激光雷达和NRTK(网络RTK)三者的融合方案,核心是利用NRTK的全局绝对定位能力,为视觉和激光雷达的局部相对定位(如SLAM技术)提…...

一张“网”如何拯救生命?浅谈医疗系统集成平台iPaaS

2026年2月,一项覆盖12家美国医院的队列研究发表于《BMJ Quality & Safety》,揭示了一个令人警醒的事实:当一名住院患者的医疗档案被系统重复创建时,其院内死亡风险飙升近5倍,入住重症监护室的概率增加3.5倍&#x…...