python中cryptodome的AES

One of them發表於2018-08-25

cryptodome中的AES使用

AES特性

AES為對稱加密, 使用金鑰來加密解密.
AES為分組密碼,分組密碼也就是把明文分成一組一組的,每組長度相等,每次加密一組資料,直到加密完整個明文。在AES標準規範中,分組長度只能是128位,也就是說,每個分組為16個位元組(每個位元組8位)。金鑰的長度可以使用128位、192位或256位。金鑰的長度不同,推薦加密輪數也不同。

python程式碼

from Cryptodome.Cipher import AES
from Cryptodome import Random


data = '需要加密的資料'

# 金鑰key需要為16, 24, 32長度的位元組型別資料.
# 我們使用AES-128位(16位元組)來使用.
key = b'1234567890123456'   # 16bytes

# 還需要使用一個向量.
iv = Random.new().read(AES.block_size)  # 生成一個長度等於AES塊大小並且不重複的金鑰向量物件.

# 使用key和iv初始化AES物件, 使用MODE_CFB模式.
aesobj = AES.new(key, AES.MODE_CFB, iv)

# 加密的資料的長度需為16的倍數, 不足16則會自動補足.
# 將金鑰向量加到加密後的密文開頭, 一起傳輸(方便後面解密).
aescrypto = iv + aesobj.encrypt(data.encode())
print(aescrypto)

# 解密需要使用Key和iv生成新的AES物件.
aesobj2 = AES.new(key, AES.MODE_CFB, aescrypto[0:16])

# 使用新的AES物件來解密.
aescrypto2 = aesobj2.decrypt(aescrypto[16:])
print(aescrypto2.decode())  # 這裡記得decode()哦

流程

1.準備好合適的key, data.
2.建立iv金鑰向量物件.
3.使用key, iv建立用於加密的AES物件.
4.使用加密的AES物件encrypt進行加密.

5.使用原有的key, iv建立用於解密的AES物件.
6.使用解密的AES物件decrypt進行解密.

可以使用binascii模組來對加密後的資料進行格式化輸出.
(ps: 遇錯得改..)

相關文章