AES加密解密


AES加密

注意:

1.密鑰必須是16個字節,加密的文本必須是16字節的倍數。

2.加密的文本是str類型,得到的加密后的結果是bytes類型。

from Crypto.Cipher import AES # 加密
def encrypt(message): ''' 加密,密鑰必須16個字節,加密的文本的字節數必須是16字節的倍數 :param message: :return: '''

    # 用於加密的密鑰,長度必須16個字節
    key = b'xvfsdfdgaefsdfsd'
    # 初始化加密器
    cipher = AES.new(key,AES.MODE_CBC,key) # 將加密文本轉為字節
    ba_data = bytearray(message,encoding='utf-8') # 獲取文本的字節數
    l1 = len(ba_data) # 求余數,如果余數為0,即將16個字節加入到字節數組,如果余數不為0,將16-余數的字節加入到字節數組
    rem = l1 % 16
    if rem == 0: v1 = 16
    else: v1 = 16 - rem for i in range(v1): ba_data.append(v1) # 將16倍數字節轉化為字符串
    final_data = ba_data.decode('utf-8') # 加密,加密文本必須是字符串,加密后得到字節類型的數據
    msg = cipher.encrypt(final_data) return msg     # bytes類型

'''測試''' a = encrypt("abc") print(a)        # b'\xc2\xadL\xab\xef\xaa\xb1}\x92\xf22\x83L\xec\xf0\x90'
print(len(a))   # 16

 

AES解密

注意:

1.解密的文本必須是bytes類型,而且是16的倍數

2.解密后的結果是bytes類型,記得去除補全的字節,獲取真正的數據

3.將數據轉換為str類型

from Crypto.Cipher import AES # 解密
def decrypt(message): # 密鑰,必須16個字節
    key = b'xvfsdfdgaefsdfsd'
    # 初始化加密器
    cipher = AES.new(key,AES.MODE_CBC,key) # 解密,傳入的必須是bytes類型,得到bytes類型的數據
    result = cipher.decrypt(message) # 去除補全的字節,獲取真正的加密內容
    data = result[0:-result[-1]] # 轉化為str類型
    return str(data,encoding='utf-8') '''測試''' encrypt_msg = encrypt("abc")  # b'\xc2\xadL\xab\xef\xaa\xb1}\x92\xf22\x83L\xec\xf0\x90'
decrypt_msg = decrypt(encrypt_msg) print(decrypt_msg)      # abc

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM