参考: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()