1. 程式人生 > 程式設計 >分享一個python的aes加密程式碼

分享一個python的aes加密程式碼

高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高階加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日釋出於FIPS PUB 197,並在2002年5月26日成為有效的標準。2006年,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。---百度百科

本科的時候弄過DES加密演算法加密計算機檔案,而DES加密演算法現在基本處於被廢棄的狀態,所以現在想試試更高階一點的。

DES加密演算法可發展為3DES加密演算法,後來又被升級為AES加密演算法,加長了金鑰長度,也就增加了暴力破解的難度。

本次使用Python進行AES的加密解密

import hashlib
from Crypto.Cipher import AES
import base64

class prpcrypt():
 def __init__(self,key):
  self.key = key # 因為在python3中AES傳入引數的引數型別存在問題,需要更換為 bytearray,所以使用encode編碼格式將其轉為位元組格式(linux系統可不用指定編碼)
  IV = 16 * '\x00'
  self.iv=IV.encode("utf-8")
  self.mode = AES.MODE_CBC
  self.BS = AES.block_size
  self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS)
  self.unpad = lambda s: s[0:-ord(s[-1])]

 # 加密
 def encrypt(self,text):
  text = self.pad(text).encode("utf-8")
  cryptor = AES.new(self.key,self.mode,self.iv)
  # 目前AES-128 足夠目前使用(CBC加密)
  ciphertext = cryptor.encrypt(text)
  # base64加密
  return base64.b64encode(bytes(ciphertext))

 # 解密
 def decrypt(self,text):
  # base64解密
  text = base64.b64decode(text)
  cryptor = AES.new(self.key,self.iv)
  # CBC解密
  plain_text = cryptor.decrypt(text)
  # 去掉補足的空格用strip() 去掉
  return self.unpad(bytes.decode(plain_text).rstrip('\0')) # 解密位元組???


def gen_binsha(data):
 shavalue = hashlib.sha256()
 shavalue.update(data)
 return shavalue.digest()

if __name__ == '__main__':
 key='78f40cecf89'
 key=gen_binsha(key.encode('utf-8'))
 pc = prpcrypt(key=key) # 初始化金鑰 和 iv

 text='qwerqwerkkk12345'
 e = pc.encrypt(text) # 加密
 d = pc.decrypt(e) # 解密
 print("加密:%s" % e)
 print("解密:%s"% d)
 print("長度:%s"% len(d))

以上就是分享一個python的aes加密程式碼的詳細內容,更多關於python的aes加密程式碼的資料請關注我們其它相關文章!