Python cryptography【密码库】库功能与使用指南

边写代码零食不停口 盼盼麦香鸡味块 、卡乐比(Calbee)薯条三兄弟 独立小包、好时kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸

边写代码边贴面膜 事业美丽两不误 DR. YS 野森博士+【AOUFSE/澳芙雪特证】377专研美白淡斑面膜组合 优惠劵

别光顾写代码更要多喝茶水,提神有营养 六安瓜片茶叶茶香二级200g 2025年新茶雨前盒装自己喝

让AI成为我们的得力助手:《用Cursor玩转AI辅助编程——不写代码也能做软件开发》


cryptography 是 Python 中一个功能强大且广泛使用的密码学库,由 PyCA (Python Cryptographic Authority) 团队维护。它提供了安全的底层密码学原语和高层易用的「配方」(recipes),旨在替代不安全的旧库(如 pycrypto)。以下是关键特性与使用示例:


核心功能

1. 对称加密(AES 等)
from cryptography.fernet import Fernet# 生成密钥
key = Fernet.generate_key()
cipher = Fernet(key)# 加密
encrypted = cipher.encrypt(b"Secret message")# 解密
decrypted = cipher.decrypt(encrypted)  # b"Secret message"
2. 非对称加密(RSA)
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()# 序列化公钥
pem = public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo
)
3. 数字签名
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding# 签名
signature = private_key.sign(b"Data to sign",padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256()
)# 验证签名
public_key.verify(signature,b"Data to sign",padding.PSS(...),  # 与签名相同参数hashes.SHA256()
)
4. 哈希函数(SHA-256 等)
from cryptography.hazmat.primitives import hashesdigest = hashes.Hash(hashes.SHA256())
digest.update(b"data")
result = digest.finalize()  # 32字节哈希值
5. 密钥派生(KDF)
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hasheskdf = PBKDF2HMAC(algorithm=hashes.SHA256(),length=32,          # 输出密钥长度salt=b"salt_value", # 随机盐值iterations=100000   # 迭代次数增强安全性
)
key = kdf.derive(b"password")  # 派生密钥
6. X.509 证书操作
from cryptography import x509
from cryptography.x509.oid import NameOID# 创建自签名证书
subject = issuer = x509.Name([x509.NameAttribute(NameOID.COUNTRY_NAME, "US"),x509.NameAttribute(NameOID.COMMON_NAME, "example.com")
])
cert = x509.CertificateBuilder().subject_name(subject).issuer_name(issuer).public_key(public_key).serial_number(x509.random_serial_number()).not_valid_before(now).not_valid_after(now + timedelta(days=365)).sign(private_key, hashes.SHA256())

安全实践

  1. 避免底层 API:优先使用高层接口(如 Fernet),它们已内置安全最佳实践。
  2. 密钥管理
    • 使用 os.urandomsecrets 模块生成随机数。
    • 通过环境变量或专用工具(如 Vault)存储密钥。
  3. 弃用警告:低层 API(hazmat)需谨慎使用,错误实现可能导致漏洞。

安装

pip install cryptography

为何选择 cryptography?

  • 安全性:基于成熟的密码学后端(如 OpenSSL、Rust)。
  • 活跃维护:定期更新修复漏洞。
  • 符合标准:支持 FIPS 140-2、NIST 等标准。
  • 丰富的文档:官方文档 提供详细指南。

注意:密码学极易因误用导致漏洞。除非必要,请使用高层 API,并参考专业安全审计。


Python 图书推荐

书名出版社推荐
Python编程 从入门到实践 第3版(图灵出品)人民邮电出版社★★★★★
Python数据科学手册(第2版)(图灵出品)人民邮电出版社★★★★★
图形引擎开发入门:基于Python语言电子工业出版社★★★★★
科研论文配图绘制指南 基于Python(异步图书出品)人民邮电出版社★★★★★
Effective Python:编写好Python的90个有效方法(第2版 英文版)人民邮电出版社★★★★★
Python人工智能与机器学习(套装全5册)清华大学出版社★★★★★

JAVA 图书推荐

书名出版社推荐
Java核心技术 第12版:卷Ⅰ+卷Ⅱ机械工业出版社★★★★★
Java核心技术 第11版 套装共2册机械工业出版社★★★★★
Java语言程序设计基础篇+进阶篇 原书第12版 套装共2册机械工业出版社★★★★★
Java 11官方参考手册(第11版)清华大学出版社★★★★★
Offer来了:Java面试核心知识点精讲(第2版)(博文视点出品)电子工业出版社★★★★★

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十四章 流程控制_ if分支

第二十四章 流程控制: if分支和输入 正如许多编程语言一样Shell也有自己的条件分支语句。有时需要根据情况进行相应的处理,因此可以通过条件分支语句实现,本章主要介绍的是if分支语句。 if语句 在Shell中if语句语法格式如下: if commands…

电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网

问题排查:1、电脑感觉网络太慢,因此打算点击了网络重置 2、点击提示会删除网络,在五分钟后关机重启 3、从设备管理器设备的无线wifi属性-事件中发现删除记录 4、选择更新驱动程序 5、从列表中选取 6、更改回老驱动版本 备选方案&#…

C语言_预处理详解

1. 预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的 1 __FILE__ //进行编译的源文件 2 __LINE__//文件当前的行号 3 __DATE__ //文件被编译的日期 4 __TIME__//文件被编译的时间 5 __STDC__//如果编译器遵循ANSI…

【QT】使用QT帮助手册找控件样式

选择帮助—》输入stylesheet(小写)—》选择stylesheet—》右侧选择Qt Style Sheets Reference 2.使用CtrlF—》输入要搜索的控件—》点击Customizing QScrollBar 3.显示参考样式表–》即可放入QT-designer的样式表中

SQL知识合集(二):函数篇

TRIM函数 作用:去掉字符串前后的空格 SELECT * FROM your_table_name WHERE TRIM(column_name) ; COALESCE函数 作用:返回其参数中的第一个非 NULL 值。它可以接受多个参数,并从左到右依次评估这些参数,直到找到第一个非 NUL…

Cursor 工具项目构建指南: Uniapp Miniprogram 环境下的 Prompt Rules 约束

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Cursor 工具项目构建指南: Uniapp Miniprogram 环境下的 Prompt Rules 约束前言项目简…

Java转Go日记(六十):gin其他常用知识

1. 日志文件 package mainimport ("io""os""github.com/gin-gonic/gin" )func main() {gin.DisableConsoleColor()// Logging to a file.f, _ : os.Create("gin.log")gin.DefaultWriter io.MultiWriter(f)// 如果需要同时将日志写入…

cocos单例工厂和自动装配

cocos单例工厂和自动装配 1 单例工厂 1.1 分析 实例字典 原理很简单&#xff0c;只是一个map&#xff0c;确保每个类只保留一个实例&#xff1b; private static _instances new Map<string, any>();获取与存储实例 这边使用的方式是生成一个唯一的id存储在类上&…

django paramiko 跳转登录

在使用Django框架结合Paramiko进行SSH远程操作时&#xff0c;通常涉及到自动化脚本的执行&#xff0c;比如远程服务器上的命令执行、文件传输等。如果你的需求是“跳转登录”&#xff0c;即在登录远程服务器后&#xff0c;再通过该服务器的SSH连接跳转到另一台服务器&#xff0…

《C++初阶之类和对象》【命名空间 + 输入输出 + 缺省参数 + 函数重载】

【命名空间 输入&输出 缺省参数 函数重载】目录 前言&#xff1a;---------------hello world---------------比较C语言和C的第一个程序&#xff1a;hello word ---------------命名空间---------------什么是命名空间&#xff1f;怎么使用命名空间&#xff1f;怎么定义…

[USACO1.5] 八皇后 Checker Challenge Java

import java.util.*;public class Main {// 标记 对角线1&#xff0c;对角线2&#xff0c;所在x轴 是否存在棋子static boolean[] d1 new boolean[100], d2 new boolean[100], d new boolean[100]; static int n, ans 0;static int[] arr new int[14]; // 记录一轮棋子位置…

云服务器Xshell登录拒绝访问排查

根据你的描述&#xff0c;使用Xshell 8登录云服务器时显示“拒绝访问”&#xff0c;可能涉及多个原因。以下结合搜索结果整理出排查和解决方法&#xff0c;按优先级排序&#xff1a; 一、检查基础网络与端口连通性 本地网络与服务器IP是否可达 在本地电脑的CMD中执行 ping 服务…

Python爬虫实战:研究urlunparse函数相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上的数据量呈现出指数级增长。如何从海量的网页数据中高效地获取有价值的信息,成为了学术界和工业界共同关注的问题。网络爬虫作为一种自动获取网页内容的技术,能够按照预定的规则遍历互联网上的网页,并提取出所需…

Spring AI学习一

随着Chatpt的火爆&#xff0c;现在Spring官方也开始支持AI了并推出了Spring AI框架&#xff0c;目前还没发布正式版本&#xff0c;这里可以先看一下官方依赖的版本。 Spring官网地址可以看这里&#xff1a;Spring | Home 目前官网上是有这两个版本&#xff1a;1.0.0和1.1.0-SN…

reverse笔记

一&#xff0c;strcat的使用方法&#xff08;在攻防世界中刷题时遇到的&#xff09; 二&#xff0c;壳&#xff08;做题遇到过但是一直不是很理解&#xff0c;今天查了一下&#xff09; 壳是一种软件保护技术&#xff0c;能够防止程序被轻易地分析和修改。 总而言之&#xff0…

spring4第7-8课-AOP的5种通知类型+切点定义详解+执行顺序

继续学习&#xff0c;方便自己复查记录 ①AOP简介&#xff1a; 面向切面编程(也叫面向方面编程)&#xff1a;Aspect Oriented Programming(AOP)。 Spring框架中的一个重要内容。。 通过预编译方式和运行期间动态代理实现在不修改源代码的情况下给程序动态统一添加功能…

EscapeX:去中心化游戏,开启极限娱乐新体验

VEX 平台推出全新去中心化游戏 EscapeX&#xff08;数字逃脫&#xff09;&#xff0c;创新性地将大逃杀玩法与区块链技术相融合。用户不仅能畅享紧张刺激的解谜过程&#xff0c;更能在去中心化、公正透明的环境中参与游戏。EscapeX 的上线&#xff0c;为 VEX 生态注入全新活力&…

Multi Agents Collaboration OS:Web DeepSearch System

背景&#xff1a;多智能体协作驱动网络信息处理的范式革新 随着大型语言模型&#xff08;LLM&#xff09;能力的突破性进展&#xff0c;人工智能正从“单点赋能”向“系统协同”演进。传统单一智能体在复杂业务场景中逐渐显露局限&#xff1a;面对需多维度知识整合、动态任务拆…

React 第五十三节 Router中 useRouteError 的使用详解和案例分析

前言 useRouteError 是 React Router v6.4 引入的关键错误处理钩子&#xff0c;用于在 路由错误边界&#xff08;Error Boundary&#xff09; 中获取路由操作过程中发生的错误信息。 它提供了优雅的错误处理机制&#xff0c;让开发者能够创建用户友好的错误界面。 一、useRou…

[arthas]arthas安装使用

arthas是阿里开源的一个java线上监控以及诊断工具&#xff0c;在docker容器中我们无需重启服务&#xff0c;也不用更改代码&#xff0c;就可以完成对应用内存、线程、日志级别的修改、方法调用的出入参、异常监测、执行耗时等&#xff0c;xxxx.xxxx.xxxxx为脱敏内容 1. 在docke…