【小知识点】Python Flask 中使用 cryptography 模块实现加密
admin
2024-05-07 12:30:27

这个小知识点,是爬虫训练场项目中一个小补充,学习时,大家用于积累简易加密算法。
当然你也可以纯粹的用于学习 Python 模块模块

cryptography 模块

    • 简易上手
    • 其它用法
      • 生成和验证消息摘要
      • 生成和管理密钥对
      • 生成和验证数字签名

简易上手

cryptography 是一个 Python 模块,用于实现加密和解密,以及生成和验证消息摘要。它是一个功能强大且易于使用的模块,可以帮助你在 Python 应用程序中实现安全通信。

下面是一些使用 cryptography 模块的常见案例:

  1. 加密和解密数据
  2. 生成和验证消息摘要(例如,MD5 或 SHA-256)
  3. 生成和验证数字签名
  4. 生成和管理密钥对(公钥和私钥

下面是一个使用 cryptography 模块加密和解密的简单示例:

from cryptography.fernet import Fernet# 生成一个 key
key = Fernet.generate_key()# 实例化一个Fernet对象
cipher_suite = Fernet(key)# 加密
encrypted_message = cipher_suite.encrypt("梦想橡皮擦".encode())
print(encrypted_message)
# 解密
decrypted_message = cipher_suite.decrypt(encrypted_message)print(decrypted_message.decode())

其它用法

cryptography 模块有许多其它用法,以下是一些常见的用例

生成和验证消息摘要

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashesmessage = b"xiang_pi_ca"# 生成信息摘要
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
digest.update(message)
digest = digest.finalize()print(digest)

default_backend() 函数返回一个默认的加密后端,即一个用于实现加密算法的对象。通常,你不需要直接使用这个函数,而是将它传递给其他 cryptography 函数或方法,以便使用默认的加密后端来实现算法。

这里将 default_backend() 函数作为参数传递给 hashes.Hash() 函数,以指定使用默认的加密后端来实现 SHA-256 算法。

生成和管理密钥对

from cryptography.hazmat.primitives.asymmetric import rsa# 生成私钥
private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048
)# 提取公钥
public_key = private_key.public_key()
print(public_key)

生成和验证数字签名

from cryptography.hazmat.primitives.asymmetric import padding, rsa
from cryptography.hazmat.primitives import hashes# 生成私钥
private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048
)# 提取公钥
public_key = private_key.public_key()message = b"xiangpica"# 信息签名
signature = private_key.sign(message,padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256()
)print(signature)# 验证签名
public_key.verify(signature,message,padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256()
)

如果希望验证签名,可以使用一个 try-except 语句来捕获并处理验证失败时抛出的异常。

# 验证签名try:public_key.verify(signature,message,padding.PSS(mgf=padding.MGF1(hashes.SHA256()),salt_length=padding.PSS.MAX_LENGTH),hashes.SHA256())print("签名验证成功")
except Exception as e:print("验证失败")

相关内容

热门资讯

街坊蒸神出圈,川菜粤菜对决,顺... 当街坊烟火遇上菜系碰撞,“街坊蒸神”便成了连接川菜粤菜的味觉纽带,而特色顺德干蒸菜,更是以独有的鲜爽...
泸州这个绝美拍照打卡地,本周末... “品茶红岩村·悟道丹山里” 叙永镇第四届“丹山慢生活” 茶旅文化体验活动 3月28日-29日 上茶山...
别再跟风网红店了,真正的美食,... 我在美食探寻之途上奔波了十几年,投身于各种各样的美食线。伴随阅历的增多,愈发深切地感觉到,真正让人垂...
常州抹茶出圈!供货瑞幸、肯德基... 春茶飘香,常州各地茶园 迎来一年中最热闹的时节 作为 春茶精深加工的明星品类 抹茶正迎来属于它的黄...
酒价内参3月25日价格发布 洋... 来源:酒业内参 新浪财经“酒价内参”过去24小时收集的数据显示,中国白酒市场主要单品的终端零售均价在...