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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
Tensorflow卷积神经网络实例
May 24 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
Python玩转PDF的各种骚操作
May 06 Python
python解析多层json操作示例
Dec 30 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
May 10 Python
Python过滤序列元素的方法
Jul 31 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
python中pyqtgraph知识点总结
Jan 26 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
js常见表单应用技巧
2008/01/09 Javascript
JavaScript Prototype对象
2009/01/07 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
js比较日期大小的方法
2015/05/12 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
python中pass语句用法实例分析
2015/04/30 Python
在Python程序中操作MySQL的基本方法
2015/07/29 Python
python基于phantomjs实现导入图片
2016/05/13 Python
python可视化实现代码
2019/01/15 Python
python全局变量引用与修改过程解析
2020/01/07 Python
python dict如何定义
2020/09/02 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
python中_del_还原数据的方法
2020/12/09 Python
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
机修工岗位职责
2013/11/24 职场文书
内业资料员岗位职责
2014/01/04 职场文书
自我鉴定四大框架
2014/01/17 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电