国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現的AES雙向對稱加密解密與用法分析

2020-02-16 01:28:06
字體:
來源:轉載
供稿:網友

本文實例講述了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 Cryptopip install binascii

實現:

#!/usr/bin/env python# -*- coding:utf-8 -*-#@author: rui.xu#這里使用pycrypto‎庫#按照方法:easy_install pycrypto‎from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hexclass 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下默認會報這個錯,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 虎林市| 芜湖县| 安康市| 银川市| 宁夏| 古丈县| 武强县| 莱阳市| 北流市| 泾阳县| 青河县| 定兴县| 崇州市| 永平县| 南京市| 阳信县| 五峰| 万载县| 镇远县| 陇川县| 象州县| 景德镇市| 封开县| 新余市| 达拉特旗| 攀枝花市| 酉阳| 合阳县| 遂宁市| 唐山市| 平山县| 泾阳县| 宁安市| 类乌齐县| 长宁区| 阿克苏市| 岳阳市| 隆尧县| 巨鹿县| 昌江| 百色市|