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 字符串格式化代码
Mar 17 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
基于python的字节编译详解
Sep 20 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
python如何创建TCP服务端和客户端
Aug 26 Python
Python数据可视化之画图
Jan 15 Python
使用TensorFlow实现二分类的方法示例
Feb 05 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
keras中的History对象用法
Jun 19 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
js动态为代码着色显示行号
2013/05/29 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
小程序实现密码输入框
2020/11/16 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
Python是编译运行的验证方法
2015/01/30 Python
python中字符串内置函数的用法总结
2018/09/13 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
中学老师的自我评价
2013/11/07 职场文书
初中校园之声广播稿
2014/01/15 职场文书
上班离岗检讨书
2014/01/27 职场文书
幼儿园教师考核制度
2014/02/01 职场文书
法学自荐信
2014/06/20 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
对领导班子的意见和建议
2015/06/08 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫