aes cbc的示例代码python版本

参考:https://www.cnblogs.com/xuchunlin/p/11421795.html
iv使用了bytes类型
key直接是string

# -*- coding=utf-8-*-
import time
import json
import  socket
from Crypto.Cipher import AES
import base64

"""
测试代码 
"""


class AESUtil:

    __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size

    @staticmethod
    def cbc_encrypt(buf, key, iv):
        key = key[0:16]
        cipher = AES.new(key, AES.MODE_CBC,iv)
        x = AESUtil.__BLOCK_SIZE_16 - (len(buf) % AESUtil.__BLOCK_SIZE_16)
        if x != 0:
            print("left: "+str(x))
            buf = buf + chr(x)*x #这里需要注意,使用的是缺失长度进行的填充,后续解密的时候会使用
        msg = cipher.encrypt(buf)
        #msg = base64.b64encode(msg)
        return msg

    @staticmethod
    def cbc_decrypt(enStr, key, iv):
        key = key[0:16]
        cipher = AES.new(key, AES.MODE_CBC, iv)
        #enStr = base64.b64decode(enStr)
        msg = cipher.decrypt(enStr)
        print("get left: "+str(ord(msg[len(msg)-1])))
        return msg[0:-ord(msg[len(msg)-1])] #移除加密时多余的部分

def test():
    body = {
        "client_time" : 12345678,
        "userdata" : {
            "data" : "hello world"
        }
    };
    now = int(time.time())

    iv = b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
    
    key="1234567812345678"
    body_s = json.dumps(body)
    print("buf :" + str(body_s))
    print("buf len: " + str(len(body_s)))
    enbuf=AESUtil.cbc_encrypt(body_s, key, iv);

    debuf = AESUtil.cbc_decrypt(enbuf, key, iv)
    print(debuf)
    print(len(debuf))
    body_v = json.loads(debuf)
    print(json.loads(debuf))

if __name__ == "__main__":
    test()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值