python AES加密

# 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值