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中List的sort方法指南
Sep 01 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
python调用fortran模块
Apr 08 Python
Python Django使用forms来实现评论功能
Aug 17 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
python3调用R的示例代码
Feb 23 Python
python如何通过实例方法名字调用方法
Mar 21 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
php 文件上传实例代码
2012/04/19 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Python编程实战之Oracle数据库操作示例
2017/06/21 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Python中内建模块collections如何使用
2020/05/27 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
美国智能家居专家:tink
2019/06/04 全球购物
四年的大学生生活自我评价
2013/12/09 职场文书
董事长秘书职责
2014/01/31 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
城市轨道交通工程职业生涯规划书范文
2014/09/16 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
2014年教务工作总结
2014/12/03 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书