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使用scrapy解析js示例
Jan 23 Python
python实现端口转发器的方法
Mar 13 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
python实现八大排序算法(1)
Sep 14 Python
tensorflow获取变量维度信息
Mar 10 Python
python3实现随机数
Jun 25 Python
python实现彩色图转换成灰度图
Jan 15 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python简单实现子网掩码转换的方法
2016/04/13 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
python之django母板页面的使用
2018/07/03 Python
python3 enum模块的应用实例详解
2019/08/12 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python匿名函数的使用方法解析
2019/10/10 Python
python数字类型math库原理解析
2020/03/02 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
商务英语专业应届毕业生求职信
2013/10/28 职场文书
高中地理教学反思
2014/01/29 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
安全先进班组材料
2014/12/26 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
盗窃案辩护词
2015/05/21 职场文书
亲戚关系证明
2015/06/24 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
Python访问Redis的详细操作
2021/06/26 Python