2021-05-12 14:32:11
Python實現AES加密,解密的兩種方法
2020-10-03 12:00:03
第一種
import base64 from Crypto.Cipher import AES # 金鑰(key), 密斯偏移量(iv) CBC模式加密 def AES_Encrypt(key, data): vi = '0102030405060708' pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16) data = pad(data) # 字串補位 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) encryptedbytes = cipher.encrypt(data.encode('utf8')) # 加密後得到的是bytes型別的資料 encodestrs = base64.b64encode(encryptedbytes) # 使用Base64進行編碼,返回byte字串 enctext = encodestrs.decode('utf8') # 對byte字串按utf-8進行解碼 return enctext def AES_Decrypt(key, data): vi = '0102030405060708' data = data.encode('utf8') encodebytes = base64.decodebytes(data) # 將加密資料轉換位bytes型別資料 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) unpad = lambda s: s[0:-s[-1]] text_decrypted = unpad(text_decrypted) # 去補位 text_decrypted = text_decrypted.decode('utf8') return text_decrypted key = '0CoJUm6Qyw8W8jud' #自己金鑰 data = 'sdadsdsdsfd' #需要加密的內容 AES_Encrypt(key, data) enctext = AES_Encrypt(key, data) print(enctext) text_decrypted = AES_Decrypt(key, enctext) print(text_decrypted)
第二種
#!/usr/bin/env python #encoding=‘utf-8' from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex from Crypto import Random class PrpCrypt(object): def __init__(self, key): self.key = key.encode('utf-8') self.mode = AES.MODE_CBC self.iv = Random.new().read(AES.block_size) # 加密函數,如果text不足16位元就用空格補足為16位元, # 如果大於16當時不是16的倍數,那就補足為16的倍數。 def encrypt(self, text): text = text.encode('utf-8') cryptor = AES.new(self.key, self.mode,self.iv) # 這裡金鑰key 長度必須為16(AES-128), # 24(AES-192),或者32 (AES-256)Bytes 長度 # 目前AES-128 足夠目前使用 length = 16 count = len(text) if count < length: add = (length - count) # backspace # text = text + (' ' * add) text = text + (' ' * add).encode('utf-8') elif count > length: add = (length - (count % length)) # text = text + (' ' * add) text = text + (' ' * add).encode('utf-8') 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, self.iv) plain_text = cryptor.decrypt(a2b_hex(text)) # return plain_text.rstrip(' ') return bytes.decode(plain_text).rstrip(' ') if __name__ == '__main__': pc = PrpCrypt('0CoJUm6Qyw8W8jud') # 初始化金鑰 data = input("請輸入待加密資料:")# e = pc.encrypt(data) # 加密 d = pc.decrypt(e).encode() # 解密 print("加密:", e) print("解密:", d)
以上就是Python實現AES加密,解密的兩種方法的詳細內容,更多關於Python實現AES加密,解密的資料請關注it145.com其它相關文章!
相關文章