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的Flask框架中验证注册用户的Email的方法
Sep 02 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
简单了解python中对象的取反运算符
Jul 01 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Python绘图实现显示中文
Dec 04 Python
详解django中Template语言
Feb 22 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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网站地图生成类示例
2014/01/13 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
js实现交通灯效果
2017/01/13 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
python爬虫爬取网页数据并解析数据
2020/09/18 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
欢送退休感言
2014/02/08 职场文书
司机岗位职责说明书
2014/07/29 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
好人好事新闻稿
2015/07/17 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
Redis Cluster集群动态扩容的实现
2021/07/15 Redis