Python基础之AES加解密

AES属于一种对称加密算法,每4*4字节矩阵为一体进行加密,加密模式有CBC、ECB、CFB、PGP、OFB、CTR、OPENPGP七种之多,本篇主讲目前广泛使用的CBC模式。

CBC模式必须要有Key(密钥)和IV(偏移量),Key字节长度可以是16位(AES-128)、24位(AES-192)、32位(AES-256),IV字节长度必须为16位。因AES算法会将明文分为若干4*4字节矩阵,所以明文(Source)的字节长度必须为16字节的倍数,如不足16位倍数后面填充0(Padding)。

Python要使用AES加解密需要安装Crypto(py2.7)或者pycryptodome(py3.5+)

# py 2.7
pip install Crypto 
# py 3.5+
pip install pycryptodome

 

Demo:

#coding=utf-8
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes


def padding(t):
    # 字节长度不足16位倍数后面补0
    p = len(t) % 16
    if p:
        return t + ('\0' * (16 - p))
    return t


def encrypt(text, key, iv):
    encrypted_text = AES.new(key, AES.MODE_CBC, iv).encrypt(padding(text))
    return encrypted_text


def decrypt(text, key, iv):
    plain_text = AES.new(key, AES.MODE_CBC, iv).decrypt(text)
    return plain_text


if __name__ == "__main__":
    text = 'aes demo'
    # key的字节长度必须为16(*AES-128*)、24(*AES-192*)、32 (*AES-256*)
    key = get_random_bytes(16)
    # iv的字节长度必须为16
    iv = get_random_bytes(16)

    encrypted_text = encrypt(text, key, iv)
    # 将字节转为16进制字符串
    print encrypted_text.encode('hex')

    plain_text = decrypt(encrypted_text, key, iv)
    print plain_text.decode('utf-8')

不足之处请指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值