python实现的AES双向对称加密解密与用法分析

 更新时间:2017年05月02日 08:55:39   作者:cmsd  
这篇文章主要介绍了python实现的AES双向对称加密解密与用法,简单分析了AES加密解密算法的基本概念并结合实例形式给出了AES加密解密算法的相关实现技巧与使用注意事项,需要的朋友可以参考下

本文实例讲述了python实现的AES双向对称加密解密与用法。分享给大家供大家参考,具体如下:

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了

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

MD5在线加密工具:
http://tools.jb51.net/password/CreateMD5Password

迅雷、快车、旋风URL加密/解密工具:
http://tools.jb51.net/password/urlrethunder

在线散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • 关于自动化测试框架pytest的Fixture固件

    关于自动化测试框架pytest的Fixture固件

    这篇文章主要介绍了关于自动化测试框架pytest的Fixture固件,Fixture它其实就是一些函数,会在执行测试方法/测试函数前后加载运行它们,需要的朋友可以参考下
    2023-03-03
  • python实现聊天小程序

    python实现聊天小程序

    这篇文章主要为大家详细介绍了python实现聊天小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python属于哪种语言

    python属于哪种语言

    在本篇内容里小编给大家整理的是一篇关于python属于哪种语言的一篇基础内容文章,有兴趣的朋友们可以参考下。
    2020-08-08
  • Python实现控制台进度条功能

    Python实现控制台进度条功能

    这篇文章主要介绍了Python实现控制台进度条功能,Python中如何写控制台进度条,本文为大家揭晓,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • 多个python文件调用logging模块报错误

    多个python文件调用logging模块报错误

    这篇文章主要介绍了多个python文件调用logging模块产生错误,需要的朋友可以参考下
    2020-02-02
  • python使用pymongo与MongoDB基本交互操作示例

    python使用pymongo与MongoDB基本交互操作示例

    这篇文章主要介绍了python使用pymongo与MongoDB基本交互操作,结合实例形式详细分析了python基于pymongo库实现与MongoDB基本交互相关操作技巧与注意事项,需要的朋友可以参考下
    2020-04-04
  • 详解Python nose单元测试框架的安装与使用

    详解Python nose单元测试框架的安装与使用

    本篇文章主要介绍了详解Python nose单元测试框架的安装与使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Python实现动态绘图的示例详解

    Python实现动态绘图的示例详解

    matplotlib中的animation提供了动态绘图功能,这篇文章主要为大家详细介绍了Python如何利用matplotlib实现动态绘图,感兴趣的可以了解一下
    2023-05-05
  • Matplotlib与NumPy结合使用技术代码和案例详解

    Matplotlib与NumPy结合使用技术代码和案例详解

    这篇文章主要介绍了Matplotlib和NumPy的基本使用方法,并通过一些具体的案例展示了如何将它们结合使用来处理和可视化数据,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • Python实现的密码强度检测器示例

    Python实现的密码强度检测器示例

    这篇文章主要介绍了Python实现的密码强度检测器,结合实例形式分析了Python密码强度检测的原理与实现方法,涉及Python字符串运算与转换、判断等相关操作技巧,需要的朋友可以参考下
    2017-08-08

最新评论