python3.6 实现AES加密的示例(pyCryptodome)


Posted in Python onJanuary 10, 2018

起因

前端日子写完的Python入库脚本,通过直接读取配置文件的内容(包含了数据库的ip,数据库的用户名,数据库的密码),因为配置文件中的数据库密码是明文显示的,所以不太安全,由此对其进行加密。

编码之路

编程环境

  1. Python3.6
  2. 第三方库?pyCryptodome

第三方库的介绍及下载

1.在之前的AES加密中,python2或者3.4采用的是pyCyrpto这个模块,但是昨天废了好大劲去安装它都是失败,而经过大量查阅发现此库已经停止维护了,在安装过程中尽管用pip install pycryto 去下载,对应的tar.gz可以下载,但是在自动安装时会报错,说是没有微软2014的工具环境。

2.后经继续查阅,发现pyCyrpto库的后续分支,有一个叫pyCryptodome的库,是前代的延伸版,下面给出一个全面的地址,如果有pip安装不了的库可以通过此网站进行对应的下载。

https://www.lfd.uci.edu/~gohlke/pythonlibs/

python3.6 实现AES加密的示例(pyCryptodome)

当然我也是通过官方推荐,使用下面命令去下载安装的,pip就是好用。。。

pip install pycryptodome

撸码开始

废话不多说,直接上demo

#AES-demo
"""
  @author: sy
  @file: python_AES.py
  @time: 2017/12/12 09:10
  @desc: AES加密
"""
from Crypto.Cipher import AES
#秘钥,此处需要将字符串转为字节
key = b'abcdefgh'
#加密内容需要长达16位字符,所以进行空格拼接
def pad(text):
  while len(text) % 16 != 0:
    text += b' '
  return text
#加密秘钥需要长达16位字符,所以进行空格拼接
def pad_key(key):
  while len(key) % 16 != 0:
    key += b' '
  return key
#进行加密算法,模式ECB模式,把叠加完16位的秘钥传进来
aes = AES.new(pad_key(key), AES.MODE_ECB)
#加密内容,此处需要将字符串转为字节
text = b'woshijiamineirong'
#进行内容拼接16位字符后传入加密类中,结果为字节类型
encrypted_text = aes.encrypt(pad(text))
print(encrypted_text)

#此处是为了验证是否能将字节转为字符串后,进行解密成功
#实际上a 就是 encrypted_text ,也就是加密后的内容
a = b'\xb9K\xe8_.q\x1c!\x9f\xa2\xc8\x06\xf5\xc1\xd07'
#用aes对象进行解密,将字节类型转为str类型,错误编码忽略不计
de = str(aes.decrypt(a),encoding='utf-8',errors="ignore")
#获取str从0开始到文本内容的字符串长度。
print(de[:len(text)])

结语

关于AES的加密,在java上看到项目中有用到过,但是对于Python这一次算是初体验了…..也算长见识了….尴尬之处就是在于加密后的是字节形式的。。。。。。也有可能是我哪里写的有问题吧,若有的话,还望高人指出呀。。

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

Python 相关文章推荐
Python实现的二维码生成小软件
Jul 11 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
python妙用之编码的转换详解
Apr 21 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
python绘制多个曲线的折线图
Mar 23 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
Python如何利用正则表达式爬取网页信息及图片
Apr 17 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
Python设计模式之MVC模式简单示例
Jan 10 #Python
Python设计模式之命令模式简单示例
Jan 10 #Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 #Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 #Python
Python设计模式之观察者模式简单示例
Jan 10 #Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 #Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 #Python
You might like
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php基础教程
2015/08/26 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
php微信开发之图片回复功能
2018/06/14 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
仿当当网淘宝网等主流电子商务网站商品分类导航菜单
2013/09/25 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
javascript中 try catch用法
2015/08/16 Javascript
完善的jquery处理机制
2016/02/21 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
Python函数参数类型*、**的区别
2015/04/11 Python
深入理解Django的中间件middleware
2018/03/14 Python
python使用Tesseract库识别验证
2018/03/21 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
我的中国梦口号
2014/06/16 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
员工年终考核评语
2014/12/31 职场文书
2015年小学开学寄语
2015/02/27 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang