AES加密——python库的封装中英密文支持。

首先应该先要知道AES加密方式主要分为ECB和CBC,ECB是电码本模式,安全性较低,所以我仅仅写了对CBC的加密封装。

from Crypto.Cipher import AES
import base64


class AesCbc:

    def __init__(self, iv, encode_='gbk'):
        self.encode_ = encode_
        self.model = AES.MODE_CBC
        self.key = None
        self.iv = self.encode_16(iv)
        # 这里的密钥长度必须是16、24或32,目前16位的就够用了

    def encode_16(self, par):
        par = par.encode(self.encode_)
        while len(par) % 16 != 0:
            par += b'\x00'
        return par

    def encrypt(self, key, text):
        text = self.encode_16(text)
        print(key, self.encode_)
        key = self.encode_16(key)
        print(key, self.encode_)
        aes_encrypt = AES.new(key, self.model, self.iv)  # 创建一个aes对象
        encrypt_text = aes_encrypt.encrypt(text)
        return base64.encodebytes(encrypt_text).decode().strip()

    def decrypt(self, key, text):
        key = self.encode_16(key)
        aes_decrypt = AES.new(key, self.model, self.iv)
        text = base64.decodebytes(text.encode(self.encode_))
        decrypt_text = aes_decrypt.decrypt(text)
        return decrypt_text.decode(self.encode_).strip('\0')


if __name__ == '__main__':
    AES_cbc = AesCbc('123456789')
    en_text = AES_cbc.encrypt('1234567891011', '浙江省杭州市余杭区文一西路,27000,180XXXX1234,家用电器')
    print('密文:', en_text)
    print('明文:', AES_cbc.decrypt('1234567891011', en_text))

几个问题哈:

        1.iv和key以及密文需要填充到16位。

        2.TypeError: decrypt() cannot be called after encrypt():加密的AES.new不允许用于解密,需要重新初始化一个用来解密。

        3.安装问题: ModuleNotFoundError:No module named "Crypto":装错库了,把多余的库删除只留下pycryptodome这个。

        

你可能感兴趣的:(PSI,安全)