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安装使用命令行交互模块pexpect的基础教程
May 12 Python
numpy数组拼接简单示例
Dec 15 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
Windows下python3.7安装教程
Jul 31 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
Python图片的横坐标汉字实例
Dec 04 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
基于Python实现下载网易音乐代码实例
Aug 10 Python
python创建文本文件的简单方法
Aug 30 Python
python语言实现贪吃蛇游戏
Nov 13 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
Apr 06 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图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
php封装一个异常的处理类
2017/06/08 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
pandas修改DataFrame列名的方法
2018/04/08 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
广州迈达威.net面试题目
2012/03/10 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
销售助理岗位职责
2014/02/21 职场文书
工程项目经理任命书
2014/06/05 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang