【小知识点】Python Flask 中使用 cryptography 模块实现加密
【摘要】 这个小知识点,是爬虫训练场项目中一个小补充,学习时,大家用于积累简易加密算法。当然你也可以纯粹的用于学习 Python 模块模块 简易上手cryptography 是一个 Python 模块,用于实现加密和解密,以及生成和验证消息摘要。它是一个功能强大且易于使用的模块,可以帮助你在 Python 应用程序中实现安全通信。下面是一些使用 cryptography 模块的常见案例:加密和解密数据...
这个小知识点,是爬虫训练场项目中一个小补充,学习时,大家用于积累简易加密算法。
当然你也可以纯粹的用于学习 Python 模块模块
简易上手
cryptography
是一个 Python 模块,用于实现加密和解密,以及生成和验证消息摘要。它是一个功能强大且易于使用的模块,可以帮助你在 Python 应用程序中实现安全通信。
下面是一些使用 cryptography
模块的常见案例:
- 加密和解密数据
- 生成和验证消息摘要(例如,MD5 或 SHA-256)
- 生成和验证数字签名
- 生成和管理密钥对(公钥和私钥
下面是一个使用 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 hashes
message = 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("验证失败")
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)