Python基于pycrypto实现的AES加密和解密算法示例


Posted in Python onApril 10, 2018

本文实例讲述了Python基于pycrypto实现的AES加密和解密算法。分享给大家供大家参考,具体如下:

一 代码

# -*- coding: UTF-8 -*-
import string
import random
from Crypto.Cipher import AES
def keyGenerater(length):
  '''''生成指定长度的秘钥'''
  if length not in (16, 24, 32):
    return None
  x = string.ascii_letters+string.digits
  return ''.join([random.choice(x) for i in range(length)])
def encryptor_decryptor(key, mode):
  return AES.new(key, mode, b'0000000000000000')
#使用指定密钥和模式对给定信息进行加密
def AESencrypt(key, mode, text):
  encryptor = encryptor_decryptor(key, mode)
  return encryptor.encrypt(text)
#使用指定密钥和模式对给定信息进行解密
def AESdecrypt(key, mode, text):
  decryptor = encryptor_decryptor(key, mode)
  return decryptor.decrypt(text)
if __name__ == '__main__':
  text = 'Python3.5 is excellent.'
  key = keyGenerater(16)
  #随机选择AES的模式
  mode = random.choice((AES.MODE_CBC, AES.MODE_CFB, AES.MODE_ECB, AES.MODE_OFB))
  if not key:
    print('Something is wrong.')
  else:
    print('key:', key)
    print('mode:', mode)
    print('Before encryption:', text)
    #明文必须以字节串形式,且长度为16的倍数
    text_encoded = text.encode()
    text_length = len(text_encoded)
    padding_length = 16 - text_length%16
    text_encoded = text_encoded + b'0'*padding_length
    text_encrypted = AESencrypt(key, mode, text_encoded)
    print('After encryption:', text_encrypted)
    text_decrypted =AESdecrypt(key, mode, text_encrypted)
    print('After decryption:', text_decrypted.decode()[:-padding_length])

二 运行结果

E:\python\python可以这样学\第18章 密码学编程\code>python AES_test.py
('key:', 'D5pcO6iu0HIbj3I2')
('mode:', 1)
('Before encryption:', 'Python3.5 is excellent.')
('After encryption:', '\xf4\x15\x9f\xaf\xea\xd0\n\x03\xfdf\xf6}9\xaa\xa34\xb4\x1eL2\x0e \x16\xa5 \xff?\x8bA\x8e\xdd\xa8')
('After decryption:', u'Python3.5 is excellent.')

Python 相关文章推荐
python通过ftplib登录到ftp服务器的方法
May 08 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
python opencv进行图像拼接
Mar 27 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
django中cookiecutter的使用教程
Dec 03 Python
requests在python中发送请求的实例讲解
Feb 17 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 #Python
对pandas中apply函数的用法详解
Apr 10 #Python
Python 25行代码实现的RSA算法详解
Apr 10 #Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 #Python
Python基于socket模块实现UDP通信功能示例
Apr 10 #Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 #Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 #Python
You might like
PHP初学入门
2006/11/19 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
快速入门Vue
2016/12/19 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
查看django版本的方法分享
2018/05/14 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
基于django传递数据到后端的例子
2019/08/16 Python
在django中自定义字段Field详解
2019/12/03 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
详解python的变量缓存机制
2021/01/24 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
前台文员的岗位职责
2013/11/14 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
团员年度个人总结
2015/02/26 职场文书
食品卫生管理制度
2015/08/06 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
python实现的人脸识别打卡系统
2021/05/08 Python
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers