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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
python执行get提交的方法
Apr 29 Python
python中循环语句while用法实例
May 16 Python
利用Python画ROC曲线和AUC值计算
Sep 19 Python
使用python实现BLAST
Feb 12 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
基于python实现破解滑动验证码过程解析
May 28 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
如何一键升级Python所有包
Nov 05 Python
python opencv实现图像配准与比较
Feb 09 Python
Python 如何实现文件自动去重
Jun 02 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
Oct 16 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下载远程文件到本地存储的方法
2015/03/24 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
js字符编码函数区别分析
2008/06/05 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
python 接口返回的json字符串实例
2018/03/27 Python
pandas object格式转float64格式的方法
2018/04/10 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
AUC计算方法与Python实现代码
2020/02/28 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python3.4中清屏的处理方法
2020/07/06 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
活动邀请函范文
2014/01/19 职场文书
新学期标语
2014/06/30 职场文书
赵氏孤儿观后感
2015/06/09 职场文书