今回は暗号アルゴリズムでおなじみのAESについてです。Pythonを実装するために今回は【PyCryptodome】というモジュールを使用します
バージョン | |
OS | Windows 11 Pro |
Python | 3.12 |
PyCryptodome | 3.20.0 |
※2024年8月現在はcryptoモジュールが使用できない(インストールできない)
平文の暗号化
暗号化メソッドは以下になります。暗号化に使用するカギを渡し、平文を暗号化します。その際に、複合化に必要となるHash値も生成されます
# 暗号化する
def encrypt(key, plainText):
cipher = AES.new(bytes(key, 'utf-8'), AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(bytes(plainText, 'utf-8'), AES.block_size))
iv = b64encode(cipher.iv).decode('utf-8')
cipherText = b64encode(ct_bytes).decode('utf-8')
return cipherText, iv
実際に使うと以下のようになります
plainText = 'TestHogeHugaPiyo'
keyValue = '12345678901234567890123456789012'
cipherText, iv = encrypt(keyValue, plainText)
print('PLAINTEXT : ' + plainText)
print('KEY : ' + keyValue)
print('CIPHERTEXT : ' + cipherText)
print('IV : ' + iv)
暗号文の復号化
復号化する際には暗号化の際に生成されたHash値と暗号化する際にも使用したカギを使用します
def decrypt(key, iv, ct):
key = bytes(key, 'utf-8')
iv = b64decode(iv)
ct = b64decode(ct)
cipher = AES.new(key, AES.MODE_CBC, iv)
pt = unpad(cipher.decrypt(ct), AES.block_size)
return pt.decode('utf-8')
実際に使用すると以下のようになります
decryptedtext = decrypt(keyValue, iv, cipherText)
print('DECRYPTEDTEXT : ' + decryptedtext)