加密解密之aes_cbc

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
import random

class CryptAes():
    def __init__(self, key, iv,mode,pad_mode):
        self.key = key
        self.iv = iv
        self.mode = mode
        self.pad_mode = pad_mode
        self.BS = AES.block_size #AES.block_size=16

    def encrypt(self, text):
        #填充个数
        pad_counts = self.BS-len(text)%self.BS
        #选择填充模式
        if pad_mode == 'zeropadding':
            pad_character = chr(0)
        else:
            pad_character = chr(pad_counts)
        pad_text = '{}{}'.format(text,pad_character*pad_counts)

        cryptor = AES.new(self.key, self.mode, self.iv)
        # 目前AES-128 足够目前使用
        ciphertext = cryptor.encrypt(pad_text)
        # 把加密后的字符串转化为16进制字符串
        return b2a_hex(ciphertext).decode(encoding='utf8')        

    def decrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.iv)
        plain_text = cryptor.decrypt(a2b_hex(text)).decode(encoding='utf8')
        return plain_text


if __name__ == '__main__':
    key = '1234567812345678'
    iv = "1234123412341234"
    mode = AES.MODE_CBC
    pad_modes = ['zeropadding','pkcs5padding','pkcs7padding']
    pad_mode = random.choice(pad_modes)
    text = 'hello world13233'
    ca = CryptAes(key, iv,mode,pad_mode)  # 初始化密钥 和 iv
    e = ca.encrypt(text)  # 加密
    d = ca.decrypt(e)  # 解密
    print('pad_mode: ',pad_mode)
    print("加密:", e)
    print("解密:", d)  
输出结果
pad_mode:  zeropadding
加密: 10712fdaa3bbf5471b34a9fad22f71cc589fba7da71d2be1599b09ea3146916d
解密: hello world13233 

猜你喜欢

转载自blog.csdn.net/shuishou07/article/details/80257691