AES加密方式有多種,根據實際情況而定,下述代碼為ECB模式,AES(256),pkcs7補全
Python3實現AES加密,需要安裝pycryptodome第三方庫。
安裝方式:
pip install pycryptodome
代碼:
from Crypto.Util.Padding import pad from Crypto.Cipher import AES def aes_cipher(key, aes_str): # 使用key,選擇加密方式 aes = AES.new(key.encode('utf-8'), AES.MODE_ECB) pad_pkcs7 = pad(aes_str.encode('utf-8'), AES.block_size, style='pkcs7') # 選擇pkcs7補全 encrypt_aes = aes.encrypt(pad_pkcs7) # 加密結果 encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 解碼 encrypted_text_str = encrypted_text.replace("\n", "") # 此處我的輸出結果老有換行符,所以用了臨時方法將它剔除 return encrypted_text_str if __name__ == '__main__': # key的長度需要補長(16倍數),補全方式根據情況而定,此處我就手動以‘0’的方式補全的32位key # key字符長度決定加密結果,長度16:加密結果AES(128),長度32:結果就是AES(256) key = "ABCDEFGHIJKLMN000000000000000000" # 加密字符串長同樣需要16倍數:需注意,不過代碼中pad()方法里,幫助實現了補全(補全方式就是pkcs7) aes_str = "abc" encryption_result = aes_cipher(key, aes_str) print(encryption_result)
這里的方法是可以實現,AES五種加密模式(CBC、ECB、CTR、OCF、CFB)的
使用 AES.new()方法時,第二個參數可以選擇AES的不同的加密模式,根據需要選擇;
pad()方法的style參數(補全方式),同樣是可以靈活變動的