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这个。

        

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值