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之入门(二)基本数据类型
May 25 Python
python基础教程之对象和类的实际运用
Aug 29 Python
Fiddler如何抓取手机APP数据包
Jan 22 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
python flask 多对多表查询功能
Jun 25 Python
Python虚拟环境项目实例
Nov 20 Python
Python同步遍历多个列表的示例
Feb 19 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
python的命名规则知识点总结
Oct 04 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
一个简单的PHP投票程序源码
2007/03/11 PHP
php去除重复字的实现代码
2011/09/16 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
php+layui数据表格实现数据分页渲染代码
2019/10/26 PHP
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
React快速入门教程
2017/01/17 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
Python-嵌套列表list的全面解析
2016/06/08 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python中实现字符串翻转的方法
2018/07/11 Python
学习python的前途 python挣钱
2019/02/27 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
运动会通讯稿400字
2014/01/28 职场文书
房产委托公证书
2014/04/08 职场文书
设计专业自荐信
2014/06/19 职场文书
美术学专业求职信
2014/07/23 职场文书
同意报考公务员证明
2015/06/17 职场文书
新闻通讯稿范文
2015/07/22 职场文书
【海涛教你打DOTA】黑鸟第一视角解说
2022/04/01 DOTA
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android