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检测lvs real server状态
Jan 22 Python
Python3爬楼梯算法示例
Mar 04 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
Python3监控疫情的完整代码
Feb 20 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
动态设置django的model field的默认值操作步骤
Mar 30 Python
django haystack实现全文检索的示例代码
Jun 24 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
Aug 31 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 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视频拍照上传头像功能实现代码分享
2015/10/08 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
javascript 获取图片颜色
2009/04/05 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue拖拽组件 vuedraggable API options实现盒子之间相互拖拽排序
2019/07/08 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
python如何将两个txt文件内容合并
2019/10/18 Python
python离线安装外部依赖包的实现
2020/02/13 Python
详解Python中import机制
2020/09/11 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
户外活动总结范文
2014/04/30 职场文书
2014年教务工作总结
2014/12/03 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
python实现网络五子棋
2021/04/11 Python
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记