# coding=utf-8 from Crypto.Cipher import AES from Crypto.Random import random from binascii import b2a_hex, a2b_hex def reformat(var, x=0): #AES加密字符串长度需为16整数倍 l = len(var) x = int(x) if x: if l < x * 32: res = var + (x * 32 - l) * chr(7) #用chr(7)来补足字符串 else: res = var[0:x * 32] else: if l % 32: k = 32 - l % 32 else: k = 0 res = var + k * chr(7) return res def encode(var, key, iv): #加密函数,结果转换成16进制 aes = AES.new(key, AES.MODE_CBC, iv) return b2a_hex(aes.encrypt(reformat(var))) def decode(var, key, iv): #解密函数, 通过replace去除可能添加的字符chr(7) aes = AES.new(key, AES.MODE_CBC, iv) return aes.decrypt(a2b_hex(var)).replace(chr(7), "") def random_str(length=16): #生成随机数 a = random.StrongRandom() chars = u'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789' res = a.sample(chars, length) return "".join(res) # 模块测试 if __name__ == "__main__": a = "1@#()&^%$!~.,'s54@^!1123123123112312" print(len(a)) m = encode(a, "XKh4coC6EQHR3B19v8u0tOn4PbsfLG3S", "v8u0tOn4PbsfLG3S") n = decode(m, "XKh4coC6EQHR3B19v8u0tOn4PbsfLG3S", "v8u0tOn4PbsfLG3S") print len(m) print(a) print(n)
python AES加密
最新推荐文章于 2024-07-31 15:57:31 发布