プログラム 技術

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)

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社
アドバンスド・ソリューション株式会社

アドバンスド・ソリューションは主にMicrosoft製品を使用して、企業の生産性向上に取り組んでいます。要件定義から導入 ...

サイトへ移動

-プログラム, 技術
-