python实现AES加密解密_python aes(1)

本文介绍了使用Python的Crypto库实现AES加密解密的方法,包括AES.MODE_CBC和AES.MODE_ECB两种模式。通过示例代码展示了加密和解密过程,并涉及了Base64编码和GBK编码的使用。此外,还提供了数据类和加密类的封装,便于实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


以上是针对ECB模式的加密解密,从这个例子中可以看出参数中有几个限制。


1. 秘钥必须为16字节或者16字节的倍数的字节型数据。
2. 明文必须为16字节或者16字节的倍数的字节型数据,如果不够16字节需要进行补全,关于补全规则,后面会在补全模式中具体介绍。


通过CBC模式例子:



from Crypto.Cipher import AES
password = b’1234567812345678’ #秘钥,b就是表示为bytes类型
iv = b’1234567812345678’ # iv偏移量,bytes类型
text = b’abcdefghijklmnhi’ #需要加密的内容,bytes类型
aes = AES.new(password,AES.MODE_CBC,iv) #创建一个aes对象

AES.MODE_CBC 表示模式是CBC模式

en_text = aes.encrypt(text)
print(“密文:”,en_text) #加密明文,bytes类型
aes = AES.new(password,AES.MODE_CBC,iv) #CBC模式下解密需要重新创建一个aes对象
den_text = aes.decrypt(en_text)
print(“明文:”,den_text)


输出:



密文: b’\x93\x8bN!\xe7~>\xb0M\xba\x91\xab74;0’
明文: b’abcdefghijklmnhi’


通过上面CBC模式的例子,可以简单看出CBC模式与ECB模式的区别:AES.new() 解密和加密重新生成了aes对象,加密和解密不能调用同一个aes对象,否则会报错`TypeError: decrypt() cannot be called after encrypt()`。


总结:


1. 在Python中进行AES加密解密时,所传入的密文、明文、秘钥、iv偏移量、都需要是bytes(字节型)数据。python 在构建aes对象时也只能接受bytes类型数据。


2.当秘钥,iv偏移量,待加密的明文,字节长度不够16字节或者16字节倍数的时候需要进行补全。


3. CBC模式需要重新生成AES对象,为了防止这类错误,我写代码无论是什么模式都重新生成AES对象。


#### 5. 编码模式


前面说了,python中的 AES 加密解密,只能接受字节型(bytes)数据。而我们常见的 `待加密的明文可能是中文`,或者`待解密的密文经过base64编码的`,这种都需要先进行编码或者解码,然后才能用AES进行加密或解密。反正无论是什么情况,在python使用AES进行加密或者解密时,都需要先转换成bytes型数据。


我们以ECB模式针对中文明文进行加密解密举例:



from Crypto.Cipher import AES

password = b’1234567812345678’ #秘钥,b就是表示为bytes类型
text = “好好学习天天向上”.encode(‘gbk’) #gbk编码,是1个中文字符对应2个字节,8个中文正好16字节
aes = AES.new(password,AES.MODE_ECB) #创建一个aes对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值