欢迎访问宙启技术站
智能推送

Python中使用MODE_GCM模式实现AES加密

发布时间:2024-01-18 23:42:32

在Python中,可以使用pycryptodomex库来实现AES加密并使用GCM模式。下面是一个使用例子,共1000字:

# 导入所需要的模块
from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes

# 定义加密函数
def encrypt(plaintext, key):
    # 生成随机的IV向量
    iv = get_random_bytes(16)
    # 创建AES加密器,并使用MODE_GCM模式
    cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
    # 使用AES加密器进行加密
    ciphertext, tag = cipher.encrypt_and_digest(plaintext.encode('utf-8'))
    # 返回加密后的密文、IV向量和GCM的tag
    return ciphertext, iv, tag

# 定义解密函数
def decrypt(ciphertext, iv, tag, key):
    # 创建AES解密器,并使用MODE_GCM模式
    cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
    # 使用AES解密器进行解密
    plaintext = cipher.decrypt_and_verify(ciphertext, tag).decode('utf-8')
    # 返回解密后的明文
    return plaintext

# 生成16字节的随机密钥
key = get_random_bytes(16)

# 待加密的明文
plaintext = "Hello, world!"

# 加密
ciphertext, iv, tag = encrypt(plaintext, key)
print("密文:", ciphertext.hex())
print("IV向量:", iv.hex())
print("GCM的tag:", tag.hex())

# 解密
decrypted = decrypt(ciphertext, iv, tag, key)
print("解密后的明文:", decrypted)

在上面的代码中,首先导入了所需的模块,包括AES加密器和生成随机字节的函数。然后定义了一个encrypt函数和一个decrypt函数,分别用于加密和解密。encrypt函数接受明文和密钥作为参数,生成随机的IV向量,并使用MODE_GCM模式创建AES加密器。然后使用AES加密器对明文进行加密,并返回密文、IV向量和GCM的tag。decrypt函数接受密文、IV向量、tag和密钥作为参数,创建AES解密器,并使用MODE_GCM模式进行解密。然后使用AES解密器对密文进行解密,并返回解密后的明文。

在主程序中,首先生成一个16字节的随机密钥。然后定义了一个待加密的明文。调用encrypt函数对明文进行加密,并打印出密文、IV向量和GCM的tag。最后调用decrypt函数对密文进行解密,并打印出解密后的明文。

值得注意的是,在使用GCM模式时,每次加密都需要生成一个新的随机IV向量,并且密文中会自动包含IV向量。在解密时,需要提供相应的IV向量和tag,以便正确解密。

希望以上内容对你有帮助!有任何其他问题,请随时提问。