用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去掉填充,得到解密后的明文。
相关文章