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学习资料
Feb 08 Python
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
Jul 19 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
Feb 26 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
python flask框架快速入门
May 14 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
javascript下使用Promise封装FileReader
2016/02/19 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
详解Vue源码学习之双向绑定
2019/04/10 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
python reverse反转部分数组的实例
2018/12/13 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
Linux中如何用命令创建目录
2015/01/12 面试题
会计专业的自荐信
2013/12/12 职场文书
汇源肾宝广告词
2014/03/20 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
三年级学生评语大全
2014/12/26 职场文书
升学宴答谢词
2015/01/05 职场文书
诚信承诺书
2015/01/19 职场文书
创业计划书之干洗店
2019/09/10 职场文书