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 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
python实现简单温度转换的方法
Mar 13 Python
python实现类的静态变量用法实例
May 08 Python
对python中return和print的一些理解
Aug 18 Python
Python实现读取json文件到excel表
Nov 18 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
python处理multipart/form-data的请求方法
Dec 26 Python
django使用xadmin的全局配置详解
Nov 15 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
python代码实现备忘录案例讲解
Jul 26 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
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
php 静态变量的初始化
2009/11/15 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
浅谈PHP的反射API
2017/02/26 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
JavaScript中的私有成员
2006/09/18 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
Vue.js用法详解
2017/11/13 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python如何读写json数据
2018/03/21 Python
python3实现随机数
2018/06/25 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
文明教师事迹材料
2014/01/16 职场文书
大学专科求职信
2014/07/02 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
转让协议书
2015/01/27 职场文书
2015年敬老院工作总结
2015/05/18 职场文书