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 ZipFile模块详解
Nov 01 Python
Python类的用法实例浅析
May 27 Python
Python中字符串的格式化方法小结
May 03 Python
深入理解Python中装饰器的用法
Jun 28 Python
python机器学习库常用汇总
Nov 15 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
python 字典中取值的两种方法小结
Aug 02 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Python装饰器的应用场景代码总结
Apr 10 Python
如何基于线程池提升request模块效率
Apr 18 Python
在Django中自定义filter并在template中的使用详解
May 19 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
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
php 猴子摘桃的算法
2017/06/20 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python与Redis的连接教程
2015/04/22 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
python scipy卷积运算的实现方法
2019/09/16 Python
浅析matlab中imadjust函数
2020/02/27 Python
运行Python编写的程序方法实例
2020/10/21 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
《夸父追日》教学反思
2014/02/26 职场文书
2014年征兵标语
2014/06/20 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
python如何读取.mtx文件
2021/04/22 Python
Python制作表白爱心合集
2022/01/22 Python