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标准库内置函数complex介绍
Nov 25 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
Django开发的简易留言板案例详解
Dec 04 Python
python flask安装和命令详解
Apr 02 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
keras中的卷积层&池化层的用法
May 22 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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
抓取YAHOO股票报价的类
2009/05/15 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
PHP7新功能总结
2019/04/14 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
javaScript中indexOf用法技巧
2019/11/26 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
Python 异常处理实例详解
2014/03/12 Python
pycharm安装图文教程
2017/05/02 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
详解Python 函数如何重载?
2019/04/23 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
租赁意向书范本
2014/04/01 职场文书
国庆节活动总结
2014/08/26 职场文书
圆明园观后感
2015/06/03 职场文书
会议主持词结束语
2015/07/03 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python