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创建线程示例
May 06 Python
Python中__call__用法实例
Aug 29 Python
Python迭代器和生成器介绍
Mar 06 Python
Python实现多线程抓取妹子图
Aug 08 Python
Numpy数组的保存与读取方法
Apr 04 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Python docx库用法示例分析
Feb 16 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Python实现序列化及csv文件读取
Jan 19 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python图像识别+KNN求解数独的实现
Nov 13 Python
Django数据统计功能count()的使用
Nov 30 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获取访问者IP地址汇总
2015/04/24 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
JSONP 跨域共享信息
2012/08/16 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python实现简易淘宝购物
2019/11/22 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
python操作yaml说明
2020/04/08 Python
涂鸦板简单实现 Html5编写属于自己的画画板
2016/07/05 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
大学生作弊检讨书
2014/02/19 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
工作证明英文模板
2014/10/21 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
2022年四月新番
2022/03/15 日漫
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技