python实现的AES双向对称加密解密与用法分析


Posted in Python onMay 02, 2017

本文实例讲述了python实现的AES双向对称加密解密与用法。分享给大家供大家参考,具体如下:

高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

AES只是个基本算法,实现AES有若干模式。其中的CBC模式因为其安全性而被TLS(就是https的加密标准)和IPSec(win采用的)作为技术标准。简单地说,CBC使用密码和salt(起扰乱作用)按固定算法(md5)产生key和iv。然后用key和iv(初始向量,加密第一块明文)加密(明文)和解密(密文)。

下面介绍python实现的AES加密解密实例,这里采用CBC模式,用到了pycrypto‎模块

安装:

pip install Crypto
pip install binascii

实现:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@author: rui.xu
#这里使用pycrypto‎库
#按照方法:easy_install pycrypto‎
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class prpcrypt():
  def __init__(self,key):
    self.key = key
    self.mode = AES.MODE_CBC
  #加密函数,如果text不足16位就用空格补足为16位,
  #如果大于16当时不是16的倍数,那就补足为16的倍数。
  def encrypt(self,text):
    cryptor = AES.new(self.key,self.mode,b'0000000000000000')
    #这里密钥key 长度必须为16(AES-128),
    #24(AES-192),或者32 (AES-256)Bytes 长度
    #目前AES-128 足够目前使用
    length = 16
    count = len(text)
    if count < length:
      add = (length-count)
      #\0 backspace
      text = text + ('\0' * add)
    elif count > length:
      add = (length-(count % length))
      text = text + ('\0' * add)
    self.ciphertext = cryptor.encrypt(text)
    #因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
    #所以这里统一把加密后的字符串转化为16进制字符串
    return b2a_hex(self.ciphertext)
  #解密后,去掉补足的空格用strip() 去掉
  def decrypt(self,text):
    cryptor = AES.new(self.key,self.mode,b'0000000000000000')
    plain_text = cryptor.decrypt(a2b_hex(text))
    return plain_text.rstrip('\0')
if __name__ == '__main__':
  pc = prpcrypt('keyskeyskeyskeys') #初始化密钥
  import sys
  e = pc.encrypt(sys.argv[1]) #加密
  d = pc.decrypt(e) #解密
  print "加密:",e
  print "解密:",d

ValueError: IV must be 16 bytes long            windows下默认会报这个错,

cryptor = AES.new(self.key,self.mode,b'0000000000000000')

  实例化后面加上后面那个就Ok了

Python 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
python读文件逐行处理的示例代码分享
Dec 27 Python
Python中的random()方法的使用介绍
May 15 Python
简单谈谈python中的Queue与多进程
Aug 25 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
Python3实现的字典遍历操作详解
Apr 18 Python
python实现简单登陆流程的方法
Apr 22 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
python3 字符串知识点学习笔记
Feb 08 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
python中安装模块包版本冲突问题的解决
May 02 #Python
Python 操作MySQL详解及实例
Apr 30 #Python
浅谈function(函数)中的动态参数
Apr 30 #Python
python脚本爬取字体文件的实现方法
Apr 29 #Python
Python在图片中添加文字的两种方法
Apr 29 #Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 #Python
You might like
如何选购合适的收音机
2021/03/01 无线电
php动态生成JavaScript代码
2009/03/09 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
JavaScript将取代AppleScript?
2014/09/18 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
Python编程之变量赋值操作实例分析
2017/07/24 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
python实现爬山算法的思路详解
2019/04/09 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
市场营销专业自荐书
2014/06/10 职场文书
植树造林的宣传标语
2014/06/23 职场文书
邓小平理论心得体会
2014/09/09 职场文书
营业员岗位职责
2015/02/11 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
基于Python实现流星雨效果的绘制
2022/03/18 Python