没有合适的资源?快使用搜索试试~ 我知道了~
首页python实现AES加密和解密
一、前言 AES,高级加密标准(英语:Advanced Encryption Standard)。是用来替代DES,目前比较流行的加密算法。 它是一种对称加密算法,与上一篇博文提到过的RSA非对称算法不同,AES只有一个密钥,这个密钥既用来加密,也用于解密。 AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB和OFB这几种(其实还有个CTR): 1.ECB模式(电子密码本模式:Electronic codebook) ECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加密,解密同理。 2.CBC模式(密码分
资源详情
资源评论
资源推荐

python实现实现AES加密和解密加密和解密
一、前言一、前言
AES,高级加密标准(英语:Advanced Encryption Standard)。是用来替代DES,目前比较流行的加密算法。
它是一种对称加密算法,与上一篇博文提到过的RSA非对称算法不同,AES只有一个密钥,这个密钥既用来加密,也用于解
密。
AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB和OFB这几种(其实还有个CTR):
1.ECB模式(电子密码本模式:模式(电子密码本模式:Electronic codebook))
ECB是最简单的块密码加密模式,加密前根据加密块大小(如AES为128位)分成若干块,之后将每块使用相同的密钥单独加
密,解密同理。
2.CBC模式(密码分组链接:模式(密码分组链接:Cipher-block chaining))
CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初
始化向量的数据块异或。
3.CFB模式(密文反馈:模式(密文反馈:Cipher feedback))
与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)。
4.OFB模式(输出反馈:模式(输出反馈:Output feedback))
OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥
流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。
二、代码实现与解析二、代码实现与解析
照旧先上代码:
from Crypto.Cipher import AES
import base64
class AEScoder():
def __init__(self):
self.__encryptKey = "iEpSxImA0vpMUAabsjJWug=="
self.__key = base64.b64decode(self.__encryptKey)
# AES加密
def encrypt(self,data):
BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
cipher = AES.new(self.__key, AES.MODE_ECB)
encrData = cipher.encrypt(pad(data))
#encrData = base64.b64encode(encrData)
return encrData
# AES解密
def decrypt(self,encrData):
#encrData = base64.b64decode(encrData)
#unpad = lambda s: s[0:-s[len(s)-1]] unpad = lambda s: s[0:-s[-1]] cipher = AES.new(self.__key, AES.MODE_ECB)
decrData = unpad(cipher.decrypt(encrData))
return decrData.decode('utf-8')
简析简析1::这里采用了面向对象的写法,创建了一个类,同时也偷懒直接把密钥写死成了类的属性。如果有灵活修改密钥的需
求,将密钥作为参数传进去即可。
简析简析2::例子里用了ECB模式,这是AES加密最简单也是很常用的模式。另外一个常用模式是CBC,会比ECB模式多一个初始
偏移向量iv:cipher = AES.new(self.__key, AES.MODE_CBC, iv)。
简析简析3::pad和unpad分别是填充函数和逆填充函数。因为AES加密对加密文本有长度要求,必须是密钥字节数的倍数。这里的
encryptKey在经过base64解码后的长度是16个字节。
简析简析3拓展:拓展:实际上AES加密有AES-128、AES-192、AES-256三种,分别对应三种密钥长度128bits(16字节)、
192bits(24字节)、256bits(32字节)。当然,密钥越长,安全性越高,加解密花费时间也越长。默认的是AES-128,其安
全性完全够用。
填充算法拓展填充算法拓展

















weixin_38588854
- 粉丝: 9
- 资源: 958
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- ARM Cortex-A(armV7)编程手册V4.0.pdf
- ABB机器人保养总结解析.ppt
- 【超详细图解】菜鸡如何理解双向链表的python代码实现
- 常用网络命令的使用 ipconfig ping ARP FTP Netstat Route Tftp Tracert Telnet nslookup
- 基于单片机控制的DC-DC变换电路
- RS-232接口电路的ESD保护.pdf
- linux下用time(NULL)函数和localtime()获取当前时间的方法
- Openstack用户使用手册.docx
- KUKA KR 30 hA,KR 60 hA机器人产品手册.pdf
- Java programming with JNI
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0