对称密钥加密:Fernet
Python 拥有强大的加密库,提供 Fernet,这是一种安全、最佳实践的加密方案。 Fernet 采用 AES CBC 加密、HMAC 签名以及版本和时间戳信息来保护数据。建议使用 Fernet.generate_key() 生成密钥。
from cryptography.fernet import Fernet
key = Fernet.generate_key()
message = 'John Doe'
token = Fernet(key).encrypt(message.encode())
decrypted_message = Fernet(key).decrypt(token).decode() # 'John Doe'
替代方案:
模糊: 如果只有需要模糊性,base64 编码就足够了。为了 URL 安全,请使用 urlsafe_b64encode()。
import base64
obscured_message = base64.urlsafe_b64encode(b'Hello world!') # b'eNrzSM3...='
Integrity Only: HMAC 无需加密即可提供数据完整性保证。
import hmac
import hashlib
key = secrets.token_bytes(32)
signature = hmac.new(key, b'Data', hashlib.sha256).digest()
AES-GCM 加密: AES-GCM 提供加密和完整性,无需填充。
import base64
key = secrets.token_bytes(32)
ciphertext = aes_gcm_encrypt(b'Data', key) # base64-encoded ciphertext and tag
decrypted_data = aes_gcm_decrypt(ciphertext, key) # b'Data'
其他方法:
AES CFB: 与无填充的 CBC 类似。
import base64
key = secrets.token_bytes(32)
ciphertext = aes_cfb_encrypt(b'Data', key) # base64-encoded ciphertext and IV
decrypted_data = aes_cfb_decrypt(ciphertext, key) # b'Data'
AES ECB: 警告:不安全! 不建议用于实际应用。
import base64
key = secrets.token_bytes(32)
ciphertext = aes_ecb_encrypt(b'Data', key) # base64-encoded ciphertext
decrypted_data = aes_ecb_decrypt(ciphertext, key) # b'Data'
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3