首页 论坛 置顶 Python:如何使用AES进行加密与解密

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #26469

    引言

    有时我们需要保持数据的秘密——例如密码、个人信息或私人消息。 AES(高级加密标准) 是一种非常流行的方法。

    AES是一种将普通文本转换为不可读文本(加密),然后再转换回普通文本(解密)的方法,使用相同的秘密密钥(对称算法)。

    当您需要保护敏感信息时——例如密码、财务数据或机密消息——加密是必不可少的。


    安装

    在开始之前:

    • 安装 Python 3.7 或更新版本
    • 通过运行以下命令安装 Python 包 cryptography
      pip install cryptography
      

    理解 AES 加密

    AES 是一种 对称密钥算法,这意味着加密和解密都使用相同的秘密密钥。

    AES 支持的密钥大小:

    • 128 位
    • 192 位
    • 256 位(最强大,也是我们在本示例中使用的密钥)

    操作模式 决定了算法的内部工作方式。常见的模式包括:

    • ECB(电子密码本): 简单但安全性较差。
    • CBC(密码块链): 比ECB更好,但需要额外注意完整性。
    • GCM(伽罗瓦/计数模式): 现代且安全。它同时提供加密和内置检查,以确保数据未被更改。在我们的代码中,我们将使用 GCM模式

    Python代码示例

    以下是一个完整的示例:

    import random
    import string
    import base64
    from cryptography.hazmat.primitives.ciphers.aead import AESGCM
    
    def encrypt_with_aes(input: str, enc_key: str, iv: str):
    key = enc_key.encode()
    nonce = iv.encode()
    plaintext = input.encode()
    aesgcm = AESGCM(key)
    ciphertext = aesgcm.encrypt(nonce, plaintext, None)
    
    # 将加密字节转换为可读的Base64字符串
     ciphertext_str = base64.b64encode(ciphertext).decode()
    return ciphertext_str
    def decrypt_with_aes(input: str, enc_key: str, iv: str):
        key = enc_key.encode()
        nonce = iv.encode()
        ciphertext = base64.b64decode(input)
        aesgcm = AESGCM(key)
        decrypted = aesgcm.decrypt(nonce, ciphertext, None)
    
    这段代码定义了一个名为 `decrypt_with_aes` 的函数,该函数用于使用 AES 算法进行解密。函数接受三个参数:输入字符串 `input`、加密密钥 `enc_key` 和初始化向量 `iv`。在函数内部,首先将加密密钥和初始化向量编码为字节,然后对输入进行 Base64 解码。接着,使用 AESGCM 类创建一个 AES 加密对象,并调用其 `decrypt` 方法进行解密,最终返回解密后的结果。 
    return decrypted.decode()
    
    def generate_iv_string(length=16):
        # 为随机数创建一个随机字符串
        chars = string.ascii_letters + string.digits + "#$()*+,-.:;<=>?@[]_"
        return ''.join(random.choices(chars, k=length))
    
    enc_key = "1Xt5YfM4ZNuFdwp3OfVkwkhhQLagWKtt"  # 32个字符的密钥
    
    iv = generate_iv_string(12)  # 生成随机的 nonce/iv
    input = "这是一条绝密信息"
    
    ciphertext = encrypt_with_aes(input, enc_key, iv) # base64 编码的数据
    print("密文:", ciphertext)
    
    decrypted = decrypt_with_aes(ciphertext, enc_key, iv)
    print("解密结果:", decrypted)
     代码工作原理:
    • encrypt_with_aes: 将消息加密,使其无法读取。
    • decrypt_with_aes: 将无法读取的消息解密为正常文本。
    • generate_iv_string: 每次生成一个新的随机nonce。

    当你运行它时,你会看到:

    密文: I1M8nE7HxHlmv7uKZPM/FsorN4hIiNhAm8fg2TavM75Dxp00zFrgRQem67E=
    解密: 这是一个绝密消息

    安全提示

      • 保持密钥安全: 不要直接在真实代码中写入密钥。将其存储在环境变量或安全的保管库中。
      • 每次使用不同的随机数: 切勿在相同密钥下重用相同的随机数。
      • 定期更换密钥: 对于长期项目,定期轮换(更改)您的密钥。

    结论

    AES-GCM是一种强大且值得信赖的数据保护方式。

    通过几行Python代码,您可以隐藏一条消息,并使用相同的密钥将其取回。

    要了解更多信息,请查看密码学库文档

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。