プログラム 技術

PythonでAES暗号化・複合化する

今回は暗号アルゴリズムでおなじみのAESについてです。Pythonを実装するために今回は【PyCryptodome】というモジュールを使用します

バージョン
OSWindows 11 Pro
Python3.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)

-プログラム, 技術
-