AES 加密/解密 字符串及文件

注意:

  1. CBC模式中,加密或者解密对象不能被重复使用,即加密了一个明文之后,不能再用此对象加密其他明文。
  2. key必须为16或24或32个字节长度。
  3. 明文字节长度必须为16的倍数。

代码:

import base64
from django.conf import settings
from utils.app_util import MD5Util
from utils.vault_util import VaultClient
from Cryptodome.Cipher import AES



class MD5Util(object):

    @classmethod
    def md5(cls, text, clen=None, salt=''):
        import hashlib
        m2 = hashlib.md5()
        m2.update((text + salt).encode('utf-8'))
        code = m2.hexdigest()
        if clen is None:
            return code
        elif clen >= len(code):
            return code
        else:
            return code[0:clen]


class AESUtil(object):
    def __init__(self):
        self.key = MD5Util.md5('my_key_for_encrypt', 16).encode('utf-8')
        self.model = AES.MODE_CBC
        self.iv = b'abcdefgh12345678'   #密斯偏移量(iv)
        self.e_aes = AES.new(self.key, self.model, self.iv)
        self.d_esc = AES.new(self.key, self.model, self.iv)

    @classmethod
    def add_to_16(cls, b_value):
        while len(b_value) % 16 != 0:
            b_value += b' '
        return b_value

    def encrypt_str(self, text):
        b_text = self.add_to_16(text.encode('utf-8'))
        encrypt_text = self.e_aes.encrypt(b_text)
        return base64.encodebytes(encrypt_text).decode('utf-8')

    def decrypt_str(self, text):
        b_text = base64.decodebytes(text.encode('utf-8'))
        decrypt_text = self.d_esc.decrypt(b_text)
        return decrypt_text.decode('utf-8').rstrip()

    def encrypt_file(self, b_text):
        b_text = self.add_to_16(b_text)
        encrypt_text = self.e_aes.encrypt(b_text)
        return encrypt_text

    def decrypt_file(self, b_text):
        decrypt_text = self.d_esc.decrypt(b_text)
        return decrypt_text.rstrip()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值