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

python cryptography

# Python Cryptography在代码里造一把锁今天想聊聊一个平时不太起眼但关键时刻又极其重要的东西密码学。当然不是让你去研究那些复杂的数学理论而是说说在Python世界里我们怎么把这些理论用起来。这就不得不提到cryptography这个库了。很多人一听到密码学脑子里可能立刻蹦出“加密”、“解密”这些词感觉离日常开发很远。其实不然想想你每天登录网站那个小锁头图标背后或者你写的程序需要安全地存个数据库密码、传点敏感数据这些地方都用得上。cryptography就是帮我们在Python里处理这些事情的得力助手它不是一个玩具而是很多严肃项目都在用的工业级工具。他是什么简单来说cryptography是一个为Python开发者提供的密码学工具箱。它不是一个单一的算法实现而是一个分层设计的、面向开发者的接口。底层是那些经过严格审查、用C语言写的高性能密码学原语比如OpenSSL而上面则包裹着一层友好、不易出错的Python API。这个设计很有意思。它把“危险”的部分容易用错导致安全漏洞的底层操作和“安全”的部分经过精心设计、引导你正确使用的上层接口分开了。你可以把它想象成一个专业的厨房锋利的刀具和高温的炉灶底层原语被妥善保管而提供给厨师的是一套顺手、安全、有明确操作指引的厨具高层API。这样即使你不是密码学专家也能做出安全的“菜”。他能做什么这个库能干的事情挺多的主要可以分成两大类。一类是对称加密。这就像你用同一把钥匙锁门和开门。常见的算法比如AES速度快适合加密大量数据。比如你有一个需要保密上传到云存储的文件就可以先用AES加密一下。cryptography里提供了非常方便的方法来做这件事。另一类是非对称加密也叫公钥密码学。这个有点特别它有两把钥匙一把公钥可以发给任何人一把私钥必须自己藏好。用公钥加密的东西只有对应的私钥能解开。反过来用私钥“签名”一段信息任何人用公钥都能验证这信息确实是你发的且没被篡改。这就像是古代的蜡封只有主人的印章能盖出那个纹样别人一看就知道信是真的。HTTPS、SSH登录、代码签名这些技术底层都依赖这个。除此之外它还能生成密码学意义上安全的随机数这可比普通的random()重要得多、计算消息的哈希值像文件的“指纹”、处理X.509证书等等。基本上日常开发中遇到的需要“保密”、“防篡改”、“验明正身”的场景它都能覆盖。怎么使用光说可能有点抽象来看几个最常用的例子。使用前当然得先用pip install cryptography装上。假设现在有个配置文件里面存着数据库密码我们不想让它以明文躺着。用对称加密来处理就很合适。cryptography的fernet模块是入门首选它把对称加密的细节都封装好了用起来很简单。fromcryptography.fernetimportFernet# 首先需要生成一把钥匙。这把钥匙必须保管好丢了数据就解不开了。keyFernet.generate_key()cipher_suiteFernet(key)# 要加密的敏感信息database_passwordbmy_super_secret_password_123encrypted_passwordcipher_suite.encrypt(database_password)# 现在 encrypted_password 就是一串乱码了可以安全地存到文件或环境变量里。# 等到程序需要连接数据库时再解密出来。decrypted_passwordcipher_suite.decrypt(encrypted_password)print(decrypted_password.decode())# 输出my_super_secret_password_123你看几行代码就搞定了不用操心加密模式、填充这些容易出错的概念。Fernet不仅加密还自动帮数据加了签名防止有人篡改密文。再来看非对称加密的场景。比如我们写了一个自动化脚本需要从某个服务器安全地拉取指令。服务器可以用它的私钥对指令签名脚本用事先配置好的服务器公钥来验证这样就确保了指令来源可信且未被修改。fromcryptography.hazmat.primitives.asymmetricimportrsa,paddingfromcryptography.hazmat.primitivesimporthashes# 服务器端生成密钥对私钥自己保存公钥发给脚本。private_keyrsa.generate_private_key(public_exponent65537,key_size2048)public_keyprivate_key.public_key()# 假设指令内容是 shutdown_at_0300messagebshutdown_at_0300# 服务器用私钥对指令进行签名signatureprivate_key.sign(message,padding.PSS(mgfpadding.MGF1(hashes.SHA256()),salt_lengthpadding.PSS.MAX_LENGTH),hashes.SHA256())# 现在服务器把 message 和 signature 一起发给脚本。# 脚本端拥有公钥进行验证try:public_key.verify(signature,message,padding.PSS(mgfpadding.MGF1(hashes.SHA256()),salt_lengthpadding.PSS.MAX_LENGTH),hashes.SHA256())print(指令签名验证通过可以安全执行。)exceptcryptography.exceptions.InvalidSignature:print(指令签名无效可能被篡改或来源不明拒绝执行。)注意这里我们开始接触hazmat危险材料子模块了。这意味着我们正在使用更底层、更灵活的接口同时也意味着需要更小心比如要正确选择填充方案和哈希算法。这就是前面提到的“分层设计”当你需要更多控制权时可以进入这一层但责任也更大了。最佳实践用了密码学并不等于就安全了用错了地方或者用错了方法可能比不用更糟。这里有几个在Python项目里使用cryptography时值得注意的点。钥匙管理是头等大事。加密后的数据安全与否很大程度上取决于钥匙藏得好不好。把钥匙硬编码在代码里、和加密数据放在同一个服务器目录下都是常见的错误。比较推荐的做法是利用环境变量或者专门的密钥管理服务如AWS KMS、HashiCorp Vault来传递密钥。对于Fernet的密钥生成一次后就妥善保存可以把它放在部署流程的安全环节中注入到运行环境。理解你用的工具。尽量使用像Fernet这样的高级抽象除非你有非常特殊的理由。这些高级API是专家们设计来避免常见陷阱的。如果不得不使用hazmat层一定要仔细阅读官方文档理解每个参数的意义。比如非对称加密中的填充padding用错了就会导致严重漏洞。版本和依赖。密码学领域在不断发展一些旧的算法会被发现弱点。cryptography库本身也会更新。保持库的版本较新并关注其发布说明避免使用已被标记为“废弃”的算法或接口。不要自己发明算法。这是密码学的大忌。我们作为开发者应该做的是“正确地使用经过时间检验的工具”而不是去创造新的密码算法。cryptography背后依赖的OpenSSL等库是经过全球无数专家和攻击者审视的远比我们自己写的要可靠。和同类技术对比Python生态里处理加密的库不止一个比如标准库里的hashlib、hmac或者第三方库PyCrypto已停止维护、PyNaCl。hashlib和hmac很好但它们只专注于哈希和消息认证码不提供完整的加密解密功能。cryptography可以看作是它们的超集并且接口更现代、统一。PyCrypto曾经很流行但已经多年没有维护了在新时代的Python版本上可能有问题而且它的API设计相对古老和容易误用。cryptography可以说是它的现代继任者。PyNaCl是一个很有意思的库它是著名密码学家Daniel J. Bernstein设计的NaCl库的Python绑定。它的哲学是提供一组绝对安全、极难用错的API“选择安全默认值”。如果你做的项目特别强调安全和易用性并且需要的功能正好在PyNaCl的覆盖范围内比如秘密盒子、公钥加密它是一个非常好的、甚至在某些方面更优雅的选择。cryptography的目标则更宏大它试图提供一个更全面、更通用的密码学工具箱覆盖从高级抽象到底层原语的整个谱系并且与Python生态如TLS实现集成得更深。所以选择哪个有时候取决于项目的具体需求和个人偏好。但就通用性、活跃度和工业采用程度而言cryptography目前是Python密码学领域当之无愧的“瑞士军刀”。它既为新手提供了安全的护栏也为专家打开了通往底层力量的大门。在需要给代码加上一把可靠锁的时候它总是一个值得优先考虑的选择。

相关文章:

python cryptography

# Python Cryptography:在代码里造一把锁 今天想聊聊一个平时不太起眼,但关键时刻又极其重要的东西:密码学。当然,不是让你去研究那些复杂的数学理论,而是说说在Python世界里,我们怎么把这些理论用起来。这…...

终极Windows 11系统优化指南:Win11Debloat深度配置与实战技巧

终极Windows 11系统优化指南:Win11Debloat深度配置与实战技巧 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter…...

Windows事件日志分析新思路:不用记Event ID,用PowerShell和Log Parser自动化生成安全周报

Windows安全日志自动化分析:告别手工整理,用PowerShell打造智能周报系统 每次月底赶安全报告时,IT管理员最头疼的莫过于要反复筛选事件日志、统计各类安全事件的发生次数。传统方法需要记住大量Event ID,手动导出数据再整理成表格…...

7天掌握FModel:从零到精通的虚幻引擎资源提取实战指南

7天掌握FModel:从零到精通的虚幻引擎资源提取实战指南 【免费下载链接】FModel Unreal Engine Archives Explorer 项目地址: https://gitcode.com/gh_mirrors/fm/FModel 你是否曾好奇《堡垒之夜》中的炫酷皮肤是如何制作的?或者想了解《Valorant》…...

别再死记硬背UNet结构了!用PyTorch手搓一个细胞分割模型,带你真正理解跳层连接

别再死记硬背UNet结构了!用PyTorch手搓一个细胞分割模型,带你真正理解跳层连接 在医学图像分析领域,细胞分割一直是基础且关键的课题。传统方法依赖人工设计特征和阈值,而深度学习带来的变革在于让模型自动学习这些特征。UNet作为…...

台达伺服PR模式调试避坑指南:从参数配置到故障排查(AL.013/AL.30报警解决)

台达伺服PR模式实战调试手册:参数配置与故障排查全解析 在工业自动化现场调试中,台达B3系列伺服驱动器的PR模式因其灵活的定位控制特性,成为许多设备制造商的首选方案。但实际应用中,工程师们常被电子齿轮比设置、软极限配置、报警…...

别让Testbench细节坑了你:Vivado中force语句和task调用的正确姿势

Vivado仿真进阶:避开Testbench中force与task的深坑 仿真验证是FPGA开发中不可或缺的一环,而Vivado作为业界主流工具,其XSIM仿真器在静态精化阶段的严格检查常常让开发者措手不及。当你在Testbench中潇洒地写下force语句或调用自定义task时&am…...

深入PyTorch源码:图解LayerNorm两种实现,弄懂weight/bias到底怎么来的

深入PyTorch源码:图解LayerNorm两种实现,弄懂weight/bias到底怎么来的 在深度学习模型的训练过程中,归一化技术扮演着至关重要的角色。不同于BatchNorm对批处理数据的标准化处理,LayerNorm(层归一化)因其在…...

别再套模板了!资深HR教你用STAR法则写出让面试官眼前一亮的Java工程师简历

资深HR视角:如何用STAR法则打造高通过率的Java工程师简历 在招聘旺季,每天面对数百份技术简历时,最让HR头疼的不是缺乏技能的候选人,而是那些"明明有能力却说不清楚"的工程师。作为拥有8年互联网大厂招聘经验的HR&#…...

51单片机IIC通信避坑指南:用Proteus8调试24C02C EEPROM时,时序不对怎么办?

51单片机IIC通信深度调试:Proteus8与24C02C实战避坑手册 当你在Proteus8中调试51单片机与24C02C EEPROM的IIC通信时,是否遇到过数据读写异常、设备无响应的问题?这往往不是代码逻辑错误,而是隐藏在时序细节中的"魔鬼"。…...

不止于可视化:用MATLAB分析克拉尼图形中的振动模态与频率响应

克拉尼图形工程化分析:MATLAB振动模态与频率响应的深度实践 当金属板上撒落的细沙在声波作用下自发排列成神秘图案时,我们见证的不仅是物理学的美学呈现,更是振动系统内在规律的直观表达。这种被称为克拉尼图形的现象,早已从实验室…...

别再傻傻分不清了!5分钟搞懂.NET、C#和ASP.NET到底啥关系(附学习路线图)

微软技术栈入门指南:从零构建.NET技术认知体系 第一次接触微软技术栈时,那些以".NET"结尾的名词确实让人眼花缭乱。记得我刚开始学习时,曾花了整整两周时间才理清这些概念之间的关系。本文将用最直观的方式帮你建立清晰的技术认知框…...

【仅限VS 2022 v17.8+可用】:.NET 11新增Span<T>-based Tensor API实战——让ResNet-50推理延迟压至11.3ms(附基准测试源码)

第一章:.NET 11 Tensor API演进与VS 2022 v17.8环境准备 .NET 11 引入了原生 Tensor API( System.Tensor),标志着 .NET 在科学计算与机器学习基础设施层面的重大升级。该 API 不再依赖第三方绑定(如 ML.NET 的底层 ONN…...

ROS1 Melodic下,slam_toolbox地图序列化与反序列化实战:拯救建图中断,实现地图增量更新

ROS1 Melodic下slam_toolbox地图序列化与反序列化实战:工程救急与效率革命 当你花费三小时构建的仓库地图因程序崩溃而消失,或是环境布局调整导致原有地图失效时,那种从头再来的绝望感每个SLAM开发者都深有体会。slam_toolbox的序列化功能正是…...

Entity Framework Core 10原生向量搜索实战(含Azure SQL PGVector双路径部署手册)

第一章:Entity Framework Core 10向量搜索扩展概览与核心价值Entity Framework Core 10正式引入原生向量搜索支持,标志着ORM框架首次在查询层深度集成语义检索能力。该扩展并非简单封装向量数据库API,而是将向量相似度计算(如余弦…...

别再手动算P值了!用Python+gseapy搞定GO/KEGG富集分析(附完整代码与避坑指南)

用Pythongseapy实现GO/KEGG富集分析:从数据到可发表图表 生物信息学研究中,差异基因列表只是起点,真正的挑战在于解读这些基因背后的生物学意义。想象一下,你刚拿到RNA-seq分析结果,面对数百个差异表达基因&#xff0c…...

三步解锁硬件隐藏性能:Universal x86 Tuning Utility完全指南

三步解锁硬件隐藏性能:Universal x86 Tuning Utility完全指南 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是…...

告别登录系统!手把手教你用BMC和NVMe-MI 1.2b监控企业级SSD健康状态

企业级SSD健康监控实战:基于BMC与NVMe-MI 1.2b的带外诊断指南 当服务器突然宕机或操作系统无法启动时,传统依赖系统内工具(如smartctl)的SSD监控手段立即失效。此时,运维工程师往往陷入被动——既无法确认是否为存储设…...

别再用PS了!用Python的invisible-watermark库,5分钟给你的图片加上隐形防盗水印

用Python隐形水印技术保护原创图片:从原理到实战 最近有位设计师朋友向我诉苦,他辛苦创作的插画作品被几个营销号直接盗用,连署名都没有。更气人的是,当他去维权时,对方竟反咬一口说图片本来就是他们的。这种糟心事在内…...

WPF自定义控件实战:从用户吐槽到优雅实现——我的DateTimePicker开发踩坑记

WPF自定义控件实战:从用户吐槽到优雅实现——我的DateTimePicker开发踩坑记 那天产品经理拍着桌子说:"我们的用户需要精确到秒的时间选择!"我看了看系统里那个老旧的DatePicker,只能显示年月日,心里默默叹了…...

数学建模国赛C题:从模拟退火到NSGA-II,多目标优化算法实战对比与选型指南

数学建模国赛C题:从模拟退火到NSGA-II,多目标优化算法实战对比与选型指南 在数学建模竞赛中,优化问题一直是核心难点之一。面对复杂的多约束、多目标场景,如何选择合适的算法往往决定了模型的成败。本文将深入剖析三种主流优化算法…...

边缘计算与生成式AI:Jetson平台实战解析

1. 在边缘设备上实现生成式AI的突破性实践 NVIDIA Jetson平台正在彻底改变生成式AI的应用范式。作为一名长期从事边缘AI开发的工程师,我亲历了从云端依赖到本地化部署的转变过程。Jetson AGX Orin这类边缘设备的出现,让我们能够在终端设备上直接运行Llam…...

手把手教你用STM32F103的SPI2驱动FPGA(附Verilog从机代码)

STM32与FPGA的SPI通信实战:从硬件连接到代码调试全解析 在嵌入式系统开发中,处理器与可编程逻辑器件的协同工作变得越来越常见。STM32作为广泛使用的微控制器,与FPGA的高速通信是实现复杂系统功能的关键。本文将带你从零开始,完成…...

如何快速搭建NAS媒体库自动化管理工具:5步完整指南

如何快速搭建NAS媒体库自动化管理工具:5步完整指南 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot MoviePilot是一款专注于NAS媒体库自动化管理的开源工具,它能够智能整理电影和电…...

从LeGO-LOAM到FAST-LIO2:Patchwork地面分割如何提升SLAM建图与定位精度?

Patchwork地面分割算法在激光SLAM中的实战优化:从原理到性能提升 激光雷达SLAM技术正面临复杂环境下的新挑战——如何从海量点云中快速准确地分离地面点,成为提升建图与定位精度的关键。传统均匀网格划分方法在远距离区域容易失效,而Patchwor…...

告别.hex和.axf:用STM32CubeProgrammer给Nucleo板烧录.bin固件的完整指南

告别.hex和.axf:用STM32CubeProgrammer给Nucleo板烧录.bin固件的完整指南 在嵌入式开发中,固件烧录是每个开发者必须掌握的基本技能。对于ST Nucleo系列开发板的用户来说,虽然Keil MDK或IAR等IDE提供了便捷的一键下载功能,但在实…...

从Houdini到UE5:VAT顶点动画纹理的‘黑盒’揭秘与自定义Shader进阶指南

从Houdini到UE5:VAT顶点动画纹理的‘黑盒’揭秘与自定义Shader进阶指南 在影视级实时特效领域,顶点动画纹理(Vertex Animation Texture)技术正逐渐成为连接DCC工具与游戏引擎的桥梁。当传统骨骼动画难以应对复杂物理模拟&#xff…...

ADAPT-VQE算法:量子计算中的自适应变分本征求解器

1. ADAPT-VQE算法概述ADAPT-VQE(Adaptive Derivative-Assembled Pseudo-Trotter Variational Quantum Eigensolver)是一种改进的变分量子本征求解器算法,专为量子计算机设计用于高效模拟量子多体系统的基态性质。与传统VQE使用固定参数化量子…...

GPU云定价新模型:特征定价(FBP)的经济学设计与实践

1. GPU云定价困境:当摩尔定律不再均衡现代GPU架构正在经历一场静默的经济危机。过去五十年间,摩尔定律不仅预测了处理器性能的指数级增长,也保证了每美元能买到的计算能力持续提升。但在今天的GPU领域,这个经济规律出现了戏剧性的…...

AI通过MRI革新帕金森病诊断:技术原理与临床价值

1. AI如何通过常规MRI扫描革新帕金森病诊断作为一名长期关注医疗AI应用的从业者,最近佛罗里达大学团队开发的AIDP平台让我眼前一亮。这个基于深度学习的系统能够从常规MRI扫描中识别帕金森病(PD)、多系统萎缩(MSA)和进…...