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判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
实例讲解Python爬取网页数据
Jul 08 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
Python守护进程实现过程详解
Feb 10 Python
Selenium常见异常解析及解决方案示范
Apr 10 Python
Python3爬虫中Ajax的用法
Jul 10 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP 事件机制(2)
2011/03/23 PHP
php导入模块文件分享
2015/03/17 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
经验几则 推荐
2006/09/05 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
js实现获取div坐标的方法
2015/11/16 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
Python简单操作sqlite3的方法示例
2017/03/22 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
Python中extend和append的区别讲解
2019/01/24 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
python解析yaml文件过程详解
2019/08/30 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
四种会话跟踪技术
2015/05/20 面试题
英语老师推荐信
2014/02/26 职场文书
金融与证券专业求职信
2014/06/22 职场文书
党风廉正建设责任书
2015/01/29 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
干部培训工作总结2015
2015/05/25 职场文书