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

# Cryptography .Fernet模块--python加解密详解

Cryptography .Fernet模块介绍

前言

cryptography 是一个用于加密、解密和签名等操作的 Python 库。它的设计目标是为开发者提供易用且安全的加密工具。cryptography 库分为 **高级 API (Fernet)**和 低级 API(hazmat)

  1. Fernet :提供一种简化的加密机制,适用于需要高安全性和简易实现的对称加密场景。
  2. hazmat(hazardous materials):为有经验的开发者提供更底层的加密原语,允许开发者手动配置和定制加密操作。

Fernet API介绍

Fernetcryptography 库提供的一种高层加密工具,它为对称加密提供了简单且安全的解决方案。Fernet 提供了一种方式,可以保证数据的机密性和完整性。它使用 AES 算法加密,结合了 HMAC 来验证消息的完整性。

特点

  • 简单易用:只需生成密钥并使用它来加密或解密数据。
  • 自动管理密钥和数据完整性:Fernet 自动为每条消息附加 HMAC,用于验证消息是否被篡改。
  • 使用 AES 算法:Fernet 默认使用 AES-128-CBC(不是256位),同时结合 HMAC(SHA256)保证消息的完整性。

相关属性方法

  1. 构造方法Fernet()
    • Fernet类是该模块的核心,提供加密和解密的功能。
from cryptograhpy.fernet import Fernet
class Fernet:def __init__(self,key: Bytes) -> None:"""创建一个新的 Fernet 对象,传入密钥。:param key: 32字节的 Base64 编码密钥"""self.key = key
if __name == '__main__':fernet = Fernet(key)
  1. Fernet.generate_key()
    • 生成一个随机32bytes 的Base64 编码秘钥
from cryptograhpy.fernet import Fernet"""生成一个随机 32 bytes Base64编码的秘钥"""key = Fernet.generate_key()print(key)
  1. Fernet().key
    • 返回Fernet对象使用的秘钥。
  2. Fernet().is_valid_key(key)
    • 验证给定秘钥是否有效
  3. Fernet().decrypt(ciphertext: bytes)
    • 使用生成的加解密实例对ciphertext进行解密(必须要是ciphertext),解密返回的也是plaintext数据,需要使用decode将bytes进行字符编码转换为字符串。
from cryptography.fernet import Fernet"""对加密的数据(ciphertext)进行解密(plaintext)"""plaintext = Fernet.decrypt(ciphertext)
  1. Fernet().encrypt(plaintext)
    • 使用生成的加解密实例对plaintext进行加密,返回ciphertext1数据。
    • 加密数据必须是bytes流,

解密流程

  1. 生成密钥

​ 使用 Fernet.generate_key() 生成一个 对称密钥

  1. 生成随机 IV

Fernet 会自动生成一个 随机的初始化向量(IV),这是 AES-CBC 模式所需的。

  1. 加密数据

​ 使用 AES-CBC 加密模式加密数据。Fernet 会:

​ 用生成的 IV 对数据进行加密。

​ 使用 HMAC 对密文进行完整性校验,确保数据未被篡改。

  1. 生成密文

​ 将 IV加密数据HMAC 合并,最终形成密文。

​ 将密文以 Base64 编码格式返回。

​ 简单总结:

生成密钥生成 IVAES 加密HMAC 验证合并为密文

​ 密文包括 IV、加密数据、HMAC,最后以 Base64 编码格式输出。

from cryptography.fernet import Fernet# 1. 生成密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)# 2. 明文数据
message = b"这是一个秘密消息"# 3. 加密数据
encrypted_message = cipher_suite.encrypt(message)# 4. 输出加密后的密文
print(f"加密后的消息:{encrypted_message}")

Fernet 的解密流程如下:

  1. 获取密文和密钥

​ 从存储或传输中获取密文和密钥。密文包括加密数据、IV 和 HMAC。

  1. 解析密文

Fernet 会自动解析密文,提取出:

IV:初始化向量。

加密数据:使用 AES-CBC 加密的密文部分。

HMAC:用来验证数据完整性。

  1. 解密数据

​ 使用 Fernet 提供的密钥:

验证 HMAC:确保密文没有被篡改。

​ 使用 IV 和密钥 进行 AES 解密操作。

  1. 输出解密结果

​ 返回原始的明文数据。

简单总结:

获取密文解析密文,提取 IV 和加密数据使用密钥、IV 和 HMAC 验证解密数据返回原始的明文数据

from cryptography.fernet import Fernet# 从安全地方获取密钥
key = b'你的密钥' 
cipher_suite = Fernet(key)# 获取密文
encrypted_message = b"从文件或其他地方获取密文"# 解密数据
decrypted_message = cipher_suite.decrypt(encrypted_message)# 输出解密后的消息
print(f"解密后的消息:{decrypted_message.decode()}")

注:Fernet 加密的数据只能使用 Fernet 解密。由于 Fernet 内部处理了 IV、填充和 HMAC,它的加密格式是专门为 Fernet 解密器设计的,因此其他加密库(如 AESCipher 等)无法解密 Fernet 加密的数据。

总结:

  • 密钥管理:密钥要安全存储,避免暴露。
  • 加解密一致性:加密和解密必须使用相同的密钥。
  • IV 自动管理:不用手动管理 IV,Fernet 会自动处理。
  • 错误处理:捕获并处理加解密异常。
  • 存储和传输:密文采用 Base64 编码存储,密钥与密文分开传输。
http://www.dtcms.com/a/447485.html

相关文章:

  • 建网站公司 快云可信网站
  • 江苏网站建设系统方案c 网站开发平台
  • wordpress子站搭建微信网站如何制作软件
  • 打工人日报#20251005
  • 网站建设话术关键词网站建设需要客户提供什么内容
  • 2-1嵌入式进阶指南:P169H002 基于 ST7789T3 和 CST816D 驱动的 LCD 触摸显示屏开发手册(2)
  • 河北建设厅官方网站昆明网站建设价位
  • 网站源码破解ui设计培训班哪家好
  • 网站的切图是谁来做中山网站搭建
  • 怎么用手机自己做网站wordpress好看的背景
  • 在Ubuntu系统里格式化2TB的移动硬盘
  • 网站建设荣茂如何推广自己的店铺?
  • 怎么样自己做网站接订单网络推广建设期的网站
  • 做刷单网站违法吗建站的平台
  • 有没有教做衣服的网站创意灵感
  • 北斗GNSS位移监测系统在地质灾害预警中的实际应用与维护管理
  • 自有服务器怎么做网站备案1网站建设公司
  • 上海网站开发设计培训上海网站设计培训班
  • 制作网站流程购物网站排名2017
  • 兼职做美工摄影去哪个网站seo整站优化方案
  • BGP实验-路由优选
  • 做网站一定要虚拟主机吗wordpress音乐插件
  • 呼和浩特做网站公司wordpress设置静态访问不了
  • 人形机器人的发展历程、技术演进与未来图景
  • 合肥市公司网站建设美观网站建设物美价廉
  • 做网站怎么选关键词游戏开发需要学什么编程语言
  • 建设部网站王尚春做天猫网站设计难吗
  • 推荐广东中山网站建设姓名logo设计免费
  • 建设兼职网站目的logo设计公司在线生成
  • 怎样打开用sql做的网站自己怎么做免费网站空间