はじめに
本記事では、ローカル環境で安全に文字列を暗号化・復号化できるPythonツールの作り方を解説します。
オンラインツールでは平文がサーバに送信される可能性があり、セキュリティが保証されないため、ローカル完結型のツールを作ることを目的とします。
1. 暗号化ツールの仕様
今回作成するツールは以下の仕様です。
- AES-256を使用(256ビット鍵)
- CBCモードで暗号化
- ランダムIVを使用して同じ平文でも毎回異なる暗号文
- パスワードから鍵を生成する際に PBKDF2-HMAC-SHA256 を使用
- Base64出力で扱いやすく
- 完全にローカル環境で完結
2. 検証環境
- OS: Windows 11
- Python: 3.11
- ライブラリ: pycryptdome
- 実行方法: コマンドプロンプト、VSCodeターミナル、バッチ実行可
3.事前準備
3.1. Python をインストール
- Python公式サイト からインストーラーをダウンロード
- インストール時に 「Add Python to PATH」 オプションを必ずチェック
- インストール完了後、コマンドプロンプトで以下を実行して確認
python --version
3.2. ライブラリ をインストール
pip install pycryptodome
4. 実装
4.1. Pythonファイル
encrypt_tool.py
import base64
import os
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Hash import SHA256
def derive_key(password: str, salt: bytes, key_len=32) -> bytes:
"""PBKDF2-HMAC-SHA256でパスワードから安全に鍵を生成"""
return PBKDF2(password.encode("utf-8"), salt, dkLen=key_len, count=100000, hmac_hash_module=SHA256)
def encrypt(text: str, password: str) -> str:
salt = os.urandom(16) # 鍵派生用のランダムSalt
key = derive_key(password, salt)
iv = os.urandom(16) # ランダムIV
cipher = AES.new(key, AES.MODE_CBC, iv)
encrypted = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size))
return base64.b64encode(salt + iv + encrypted).decode("utf-8")
def decrypt(text: str, password: str) -> str:
raw = base64.b64decode(text)
salt = raw[:16]
iv = raw[16:32]
encrypted = raw[32:]
key = derive_key(password, salt)
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher.decrypt(encrypted), AES.block_size)
return decrypted.decode("utf-8")
def main():
mode = input("暗号化する場合は e、復号化する場合は d を入力してください: ").lower()
key = input("キーを入力してください: ")
target = input("対象文字列を入力してください: ")
try:
if mode == "e":
print("\n暗号化結果:")
print(encrypt(target, key))
elif mode == "d":
print("\n復号化結果:")
print(decrypt(target, key))
else:
print("e または d を入力してください。")
except Exception as e:
print("エラー:", e)
if __name__ == "__main__":
main()
4.2. Batファイル
run.bat
@echo off
python "%~dp0encrypt_tool.py"
pause
5. 実行例
5.1. 暗号化
暗号化する場合は e、復号化する場合は d を入力してください: e
キーを入力してください: mypassword
対象文字列を入力してください: secret123
暗号化結果:
l8IhW6Mv0Xj5G2Ry2v6ZrNxF9Mb+Y1sS5cO1Kxy+K8Y=
5.2. 暗号化
暗号化する場合は e、復号化する場合は d を入力してください: d
キーを入力してください: mypassword
対象文字列を入力してください: l8IhW6Mv0Xj5G2Ry2v6ZrNxF9Mb+Y1sS5cO1Kxy+K8Y=
復号化結果:
secret123
6. まとめ
- Python公式サイトからのインストールで安全にPython環境を構築
- ローカルで完結するAES暗号化ツールは、オンラインツールより安全
- PBKDF2-HMAC-SHA256 + ランダムIV/Saltでセキュリティ強化
- Base64出力により暗号文を簡単に扱える
- バッチファイルを使えば、ダブルクリックで実行可能