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 相关文章推荐
python通过imaplib模块读取gmail里邮件的方法
May 08 Python
python编码最佳实践之总结
Feb 14 Python
python的文件操作方法汇总
Nov 10 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
python交易记录链的实现过程详解
Jul 03 Python
python生成随机红包的实例写法
Sep 02 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
python基于turtle绘制几何图形
Jun 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
正则表达式语法
2006/10/09 Javascript
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
javascript 使td内容不换行不撑开
2012/11/29 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
python生成日历实例解析
2014/08/21 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
医务人员自我评价
2014/01/26 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
公证书标准格式
2014/04/10 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书
老人与海读书笔记
2015/06/26 职场文书
PHP中->和=>的意思
2021/03/31 PHP
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript