天天看点

python实现AES加解密

AES加解密理论去百度吧,直接上代码,python实现,拿来就能用

from Crypto.Cipher import AES
import base64
import string
import random

class AESCrypto(object):

    """AES加密算法"""

    def __init__(self):

        self.aes_mode = AES.MODE_ECB
        self.aes_bs = 16
        self.AES_PAD = lambda s: s + (self.aes_bs - len(s) % self.aes_bs) * chr(self.aes_bs - len(s) % self.aes_bs)
        self.AES_UN_PAD = lambda s: s[0:-s[-1]]

    def aes_decryption(self, data, key):
        """
        aes解密
        解密后,将补足的空格用strip() 去掉
        :param data: 接收到的密文数据集合
        :param key: 服务端返回的随机生成的AESKey,二进制形式
        :return: aes解密后的明文数据
        """
        generator = AES.new(key, self.aes_mode)  # ECB模式无需向量iv
        data += (len(data) % 4) * '='
        decrypt_bytes = base64.b64decode(data)
        result = generator.decrypt(decrypt_bytes)
        result = self.AES_UN_PAD(result)
        result = str(result,encoding="utf-8")  # 转换类型
        # 去除解码后的非法字符
        return result

    def aes_encryption(self, data, key):
        """
        aes加密
        如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数
        :param data: 要上传的所有明文数据集合,包含sign
        :param key:  本地随机生成的AESKey,字符串形式
        :return: aes加密后的密文数据
        """
        generator = AES.new(key, self.aes_mode)  # ECB模式无需向量iv
        crypt = generator.encrypt(self.AES_PAD(data))
        encrypt_str = base64.b64encode(crypt)
        result = encrypt_str.decode()
        return result

    @classmethod
    def aes_encrypt_key(cls):
        """随机生成AESKey"""
        source_str=string.ascii_letters+string.digits
        aes_key="".join(random.sample(source_str,16))
        return aes_key
           

继续阅读