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入门篇之对象类型
Oct 17 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
Python做文本按行去重的实现方法
Oct 19 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
wxPython之解决闪烁的问题
Jan 15 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
python实现tail -f 功能
Jan 17 Python
python如何判断IP地址合法性
Apr 05 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
Django中ORM的基本使用教程
Dec 22 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面向对象之多态
2014/08/20 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PDO::setAttribute讲解
2019/01/29 PHP
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
python的常见命令注入威胁
2013/02/18 Python
python3图片转换二进制存入mysql
2013/12/06 Python
Python操作列表的常用方法分享
2014/02/13 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
python集合的新增元素方法整理
2020/12/07 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
营销总经理的岗位职责
2013/12/15 职场文书
高一生物教学反思
2014/01/17 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
田径运动会通讯稿
2014/09/13 职场文书
特岗教师个人总结
2015/02/10 职场文书
中学推普周活动总结
2015/05/07 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
DSP接收机前端设想
2022/04/05 无线电
Java线程的6种状态与生命周期
2022/05/11 Java/Android
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers