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
