用Python实现对称加密算法

2023-03-26 00:00:00 python 加密算法 对称

实现对称加密算法的常用方式是使用加密算法库,比如Python中的cryptography库。下面给出一个使用该库实现对称加密算法的例子,使用的是AES算法,加密模式为CBC,填充方式为PKCS7。

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os

# 生成随机密钥
key = os.urandom(32)

# 生成随机IV
iv = os.urandom(16)

# 待加密的明文
plaintext = b"pidancode.com"

# 使用PKCS7填充方式
padder = padding.PKCS7(algorithms.AES.block_size).padder()
padded_plaintext = padder.update(plaintext) + padder.finalize()

# 创建Cipher对象
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())

# 加密
encryptor = cipher.encryptor()
ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize()

# 解密
decryptor = cipher.decryptor()
decrypted_padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize()

# 去除填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
decrypted_plaintext = unpadder.update(decrypted_padded_plaintext) + unpadder.finalize()

print("加密后的密文:", ciphertext)
print("解密后的明文:", decrypted_plaintext)

输出结果:

加密后的密文: b'\x9a\xe1\xc2\x8dDm\x00\xdb\xfaZ\xb1jx\xf8\x7f\xd9'
解密后的明文: b'pidancode.com'

这里的加密算法是AES,使用了CBC模式,需要提供一个随机的IV。同时使用了PKCS7填充方式。在实现中,先使用padder将待加密的明文进行填充,然后使用encryptor进行加密,得到密文ciphertext。接着使用decryptor进行解密,得到padded_plaintext,再使用unpadder去掉填充,得到解密后的明文。

相关文章