Python_pycrypto_实现AES加密与解密


安装

python 在 Windows下使用AES时要安装的是pycryptodome 模块   pip install pycryptodome 

python 在 Linux下使用AES时要安装的是pycrypto模块   pip install pycrypto 

使用

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB,具体使用哪种根据项目情况而定。

下面介绍加密方式采用 ECB加密,填充方式采用pkcs7 的加密与解密方法

import base64

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad


def aes_encrypt(secret_key, data):
    """加密数据
    :param secret_key: 加密秘钥
    :param data: 需要加密数据
    """
    data = bytes(data, encoding="utf-8")
    # 填充数据采用pkcs7
    data = pad(data, block_size=16, style="pkcs7")
    # 创建加密器
    cipher = AES.new(key=secret_key.encode("utf-8"), mode=AES.MODE_ECB)
    # 对数据进行加密
    encrypted_data = cipher.encrypt(data)
    # 对数据进行base64编码
    encrypted_data = base64.b64encode(encrypted_data)
    return encrypted_data.decode()


def aes_decrypt(secret_key, data):
    """解密数据
    """
    data = base64.b64decode(data)
    cipher = AES.new(key=secret_key.encode("utf-8"), mode=AES.MODE_ECB)
    decrypt_data = cipher.decrypt(data)
    decrypt_data = unpad(decrypt_data, 16, style="pkcs7")
    return decrypt_data.decode("utf-8")


if __name__ == '__main__':
    key = "22a1d4c4263e83d7f8c33a321eb19ae7"
    data = "asdASD73j8H9k6C1asvhBOK0PXOzJM7dsqXysssW"
    print("原始数据:%s" % data)
    r = aes_encrypt(key, data)
    print("加密数据:%s" % r)
    r = aes_decrypt("22a1d4c4263e83d7f8c33a321eb19ae7", r)
    print("解密数据:%s" % r)

执行情况如下