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 25 Python
Python单链表简单实现代码
Apr 27 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
浅述python2与python3的简单区别
Sep 19 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 Python
Python 正则模块详情
Nov 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之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
取键盘键位ASCII码的网页
2007/07/30 Javascript
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python字符串处理实例详解
2017/05/18 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Python数学形态学实例分析
2019/09/06 Python
国外软件测试工程师面试题
2016/12/09 面试题
英文翻译的自我评价语句
2013/10/04 职场文书
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
四年的个人工作自我评价
2013/12/10 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
会计求职信范文
2014/05/24 职场文书
共青团员自我评价
2015/03/10 职场文书
2016春节慰问信范文
2015/03/25 职场文书
幸福终点站观后感
2015/06/04 职场文书
生日宴会祝酒词
2015/08/10 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Redis三种集群模式详解
2021/10/05 Redis