在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.mode, 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進行加解密的方法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。