基础
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import time
简单加密
简单但非常有效
# 生成密钥
key = Fernet.generate_key()
# 加载密钥
x = Fernet(key)
# 加密
x.encrypt_at_time(data=b"明文", current_time=int(time.time())) # current_time 可选
# 解密
x.decrypt(b'秘文')
密钥轮换
全部密钥 有一个正确就可以解密
# 加载全部密钥
x = MultiFernet([密钥1, 密钥2, 密钥3])
# 解密
x.decrypt(b'秘文')
密码获取 Key
用密码获取Key
password = b"密码"
kdf = PBKDF2HMAC(
algorithm=hashes.SHA3_512(), # 单向撒列函数
length=32,
salt=b'盐',
iterations=100000, # 拉伸
)
key = base64.urlsafe_b64encode(kdf.derive(password))
随机数
# 随机数 bytes
iv = os.urandom(16)
# 16进制
iv = os.urandom(16).hex()
# 随机数
iv = int.from_bytes(os.urandom(1), byteorder="big")