哈希和加密
文章目录
- 加密解密
- 对称加密
- 不对称加密
- Fernet.generate_key()
- f.encrypt()
- f.decrypt(token)
- rsa非对称加密
https://www.byhy.net/py/lang/etc/hash_encrypt/#_4
加密解密
对称加密
加密和解密使用同一个密钥
不对称加密
使用一对密钥:公钥(public key)+ 私钥(private key)
公钥加密,私钥解密(典型场景)
或者 私钥签名,公钥验证(数字签名场景)
Fernet.generate_key()
Fernet.generate_key() 会生成一个随机的密钥(Base64 编码的字节串)。
Fernet(key) 用这个密钥创建一个加密器对象 f。
这个密钥非常重要,加密和解密都要用它(对称加密的特点)。
f.encrypt()
f.encrypt() 使用密钥对 srcBytes 进行加密。
返回的是加密后的 字节串,里面包含:
加密后的数据
时间戳(保证 token 有效性,可以配置过期时间)
签名(保证完整性,防篡改)
f.decrypt(token)
f.decrypt() 用同样的密钥把 token 解密回来。
返回的还是字节串 → .decode() 转回字符串。
rsa非对称加密
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes# 1️⃣ 生成一对密钥 (公钥 + 私钥)
private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048
)
public_key = private_key.public_key()# 2️⃣ 原始消息
message = "非对称加密真的很神奇!".encode()# 3️⃣ 使用 公钥 加密
ciphertext = public_key.encrypt(message,padding.OAEP( # 填充方式 (常用 OAEP)mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)
print("密文:", ciphertext)# 4️⃣ 使用 私钥 解密
plaintext = private_key.decrypt(ciphertext,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)
print("解密结果:", plaintext.decode())