python fernet加解密示例

Python
#!/usr/bin/env python3

from cryptography.fernet import Fernet
import base64



'''
Fernet必须使用的秘钥必须满足以下要求:
保证字符串长度足够(至少 32 字节),若不够就用字符串自身重复填充。
把字符串编码成字节。
对字节进行 Base64 编码,从而生成 Fernet 可用的密钥。

# 自动产生秘钥
def generate_key():
    return Fernet.generate_key()
'''
def generate_key_from_string(custom_string):
    # 确保字符串长度足够,如果不够则用 0 填充
    padded_string = (custom_string * (32 // len(custom_string) + 1))[:32]
    # 将字符串编码为字节
    key_bytes = padded_string.encode()
    # 进行 Base64 编码生成 Fernet 可用的密钥
    fernet_key = base64.urlsafe_b64encode(key_bytes)
    return fernet_key


def encrypt_message(message, key):
    f = Fernet(key)
    encrypted = f.encrypt(message.encode())
    return encrypted


def decrypt_message(encrypted_message, key):
    f = Fernet(key)
    decrypted = f.decrypt(encrypted_message).decode()
    return decrypted


if __name__ == "__main__":
    # 自定义字符串作为密钥
    custom_string = "your_custom_key_string"
    key = generate_key_from_string(custom_string)
    print(f"生成的密钥: {key}")

    # 要加密的消息
    original_message = "这是一个需要加密的消息。"
    print(f"原始消息: {original_message}")

    # 加密消息
    encrypted = encrypt_message(original_message, key)
    print(f"加密后的消息: {encrypted}")

    # 解密消息
    decrypted = decrypt_message(encrypted, key)
    print(f"解密后的消息: {decrypted}")