この記事では、PythonでのAES(Advanced Encryption Standard)暗号化と復号の手順について詳細に解説します。具体的なコード例、その解説、さらに応用例を含めています。
目次
はじめに
AES(Advanced Encryption Standard)は、広く用いられている暗号化アルゴリズムの一つです。セキュリティが重要な情報を扱う際に、暗号化と復号は欠かせない技術となっています。
AES暗号化の基本
PythonでのAES暗号化ライブラリ
PythonでAES暗号化を行うには、多くのライブラリが存在しますが、ここでは`pycryptodome`を使用します。
# pycryptodomeのインストール
!pip install pycryptodome
基本的な暗号化と復号のコード
以下は、AES暗号化と復号を行う基本的なPythonコードです。
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 鍵の生成(16バイト)
key = get_random_bytes(16)
# 暗号化したいデータ
data = "秘密のメッセージ".encode('utf-8')
# AESオブジェクトの生成
cipher = AES.new(key, AES.MODE_EAX)
# データの暗号化
ciphertext, tag = cipher.encrypt_and_digest(data)
# データの復号
cipher = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)
decrypted_data = cipher.decrypt(ciphertext)
print(decrypted_data.decode('utf-8')) # '秘密のメッセージ'と表示される
コードの解説
1. `Crypto.Cipher`から`AES`をインポートします。
2. `get_random_bytes`関数でランダムな16バイトの鍵を生成します。
3. 暗号化したいデータをUTF-8でエンコードします。
4. `AES.new()`でAESオブジェクトを生成し、
5. `encrypt_and_digest()`メソッドでデータを暗号化します。
6. 復号は、同じ鍵とNonce(Number used once)を用いて、`decrypt()`メソッドで行います。
応用例
ファイルの暗号化と復号
AESを用いて、ファイル全体を暗号化し、それを再び復号する例です。
# ファイルの読み込み
with open('secret.txt', 'rb') as f:
file_data = f.read()
# AESオブジェクトの生成と暗号化
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(file_data)
# 暗号化したデータを保存
with open('encrypted.txt', 'wb') as f:
f.write(ciphertext)
# 暗号化したデータの読み込み
with open('encrypted.txt', 'rb') as f:
encrypted_data = f.read()
# データの復号
cipher = AES.new(key, AES.MODE_EAX, nonce=cipher.nonce)
decrypted_data = cipher.decrypt(encrypted_data)
# 復号したデータを保存
with open('decrypted.txt', 'wb') as f:
f.write(decrypted_data)
暗号文の送受信
AES暗号化を用いて、安全なメッセージの送受信を行う例です。
# サーバー側
def server(ciphertext, key, nonce):
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
decrypted_data = cipher.decrypt(ciphertext)
return decrypted_data.decode('utf-8')
# クライアント側
def client(data, key):
cipher = AES.new(key, AES.MODE_EAX)
ciphertext, tag = cipher.encrypt_and_digest(data.encode('utf-8'))
return ciphertext, cipher.nonce
# 使用例
key = get_random_bytes(16)
ciphertext, nonce = client("安全なメッセージ", key)
received_message = server(ciphertext, key, nonce)
print(received_message) # "安全なメッセージ"と表示される
まとめ
PythonでAES暗号化と復号を行う方法について解説しました。基本的な手順から、ファイルの暗号化や安全なメッセージの送受信まで、様々な応用例を通じて理解を深めることができるでしょう。セキュリティ対策として、これらの手法を活用してみてください。
コメント