python实现AES加密与解密


Posted in Python onMarch 28, 2019

AES加密方式有五种:ECB, CBC, CTR, CFB, OFB

从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现

python 在 Windows下使用AES时要安装的是pycryptodome 模块  

pip install pycryptodome

python 在 Linux下使用AES时要安装的是pycrypto模块  

pip install pycrypto

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

AES CBC 加密的python实现

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):
 if len(text.encode('utf-8')) % 16:
 add = 16 - (len(text.encode('utf-8')) % 16)
 else:
 add = 0
 text = text + ('\0' * add)
 return text.encode('utf-8')


# 加密函数
def encrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_CBC
 iv = b'qqqqqqqqqqqqqqqq'
 text = add_to_16(text)
 cryptos = AES.new(key, mode, iv)
 cipher_text = cryptos.encrypt(text)
 # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
 return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
 key = '9999999999999999'.encode('utf-8')
 iv = b'qqqqqqqqqqqqqqqq'
 mode = AES.MODE_CBC
 cryptos = AES.new(key, mode, iv)
 plain_text = cryptos.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
 e = encrypt("hello world") # 加密
 d = decrypt(e) # 解密
 print("加密:", e)
 print("解密:", d)

AES ECB加密的python实现

"""
ECB没有偏移量
"""
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


def add_to_16(text):
 if len(text.encode('utf-8')) % 16:
 add = 16 - (len(text.encode('utf-8')) % 16)
 else:
 add = 0
 text = text + ('\0' * add)
 return text.encode('utf-8')


# 加密函数
def encrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_ECB
 text = add_to_16(text)
 cryptos = AES.new(key, mode)

 cipher_text = cryptos.encrypt(text)
 return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
 key = '9999999999999999'.encode('utf-8')
 mode = AES.MODE_ECB
 cryptor = AES.new(key, mode)
 plain_text = cryptor.decrypt(a2b_hex(text))
 return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
 e = encrypt("hello world") # 加密
 d = decrypt(e) # 解密
 print("加密:", e)
 print("解密:", d)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用7z解压软件备份文件脚本分享
Feb 21 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python中字符串的修改及传参详解
Nov 30 Python
python ipset管理 增删白名单的方法
Jan 14 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
pytorch标签转onehot形式实例
Jan 02 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
python实现计数排序与桶排序实例代码
Mar 28 #Python
python实现AES和RSA加解密的方法
Mar 28 #Python
python简单实现AES加密和解密
Mar 28 #Python
Python中dict和set的用法讲解
Mar 28 #Python
python3.x实现base64加密和解密
Mar 28 #Python
python实现AES加密解密
Mar 28 #Python
详解python tkinter教程-事件绑定
Mar 28 #Python
You might like
用libtemplate实现静态网页生成
2006/10/09 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
详解如何实现Laravel的服务容器的方法示例
2019/04/15 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
ASP Json Parser修正版
2009/12/06 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
公司薪酬管理制度
2014/01/31 职场文书
三年级评语大全
2014/04/23 职场文书
环保倡议书500字
2014/05/15 职场文书
大学生心理活动总结
2014/07/04 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
2015高考寄语集锦
2015/02/27 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
JavaScript设计模式之原型模式详情
2022/06/21 Javascript