「いろいろなサービスで使うパスワードを安全に管理したい」
「Javaの練習として役立つツールを作ってみたい」
そんな悩みを持つ方に最適なのが、パスワード管理ツールの自作です。
このツールでは、パスワードの登録・検索・暗号化保存といった機能を通じて、
Javaのファイル操作・暗号化・クラス設計・繰り返し処理をバランスよく学ぶことができます。
この記事では、誰でも簡単に実装できる安全設計のパスワード管理アプリの作成方法を、コード付きでやさしく解説します。
パスワード管理ツールとは?
Javaで学ぶ実用的なセキュリティツール
結論:パスワードを安全に保存・管理する機能をJavaで簡単に体験できます。
SNSやショッピング、仕事のアカウントなど、私たちは多くのパスワードを使っています。
それらを紙やメモ帳で管理するのはとても危険です。
そこで活躍するのが「パスワード管理ツール」です。
Javaを使えば、自分専用の簡易ツールを作ることで、ファイル保存や暗号化も同時に学べます。
作成するツールの構成を理解しよう
最低限の3機能でシンプルに設計
結論:以下の3機能だけで実用的な管理ツールが作成可能です。
- パスワードを登録(サービス名+ID+PWを保存)
- 登録済みの情報を検索
- ファイルに保存&読み込み(暗号化付き)
構造イメージ:
PasswordManager.java
├─ List<Credential> データ保持
├─ AESUtil.java 暗号化・復号処理
└─ password.dat 保存ファイル
Credentialクラスの作成
登録情報(サービス名・ID・PW)を持つデータクラス
public class Credential {
private String service;
private String user;
private String password;
public Credential(String service, String user, String password) {
this.service = service;
this.user = user;
this.password = password;
}
public String getService() {
return service;
}
public String getUser() {
return user;
}
public String getPassword() {
return password;
}
@Override
public String toString() {
return "サービス: " + service + ", ユーザーID: " + user + ", パスワード: " + password;
}
}
暗号化クラス AESUtil を作成
JavaのAES方式でパスワードを安全に
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtil {
private static final String KEY = "1234567890123456"; // 16文字
public static String encrypt(String data) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
public static String decrypt(String encrypted) throws Exception {
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decoded = Base64.getDecoder().decode(encrypted);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
メイン処理:PasswordManagerクラス
コマンドラインから登録・検索できる機能を実装
import java.io.*;
import java.util.*;
public class PasswordManager {
private static final String FILE = "password.dat";
private static List<Credential> credentials = new ArrayList<>();
public static void main(String[] args) throws Exception {
load();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("\n1. 登録 | 2. 検索 | 0. 終了");
System.out.print("選択してください: ");
String input = scanner.nextLine();
if (input.equals("1")) {
System.out.print("サービス名: ");
String service = scanner.nextLine();
System.out.print("ユーザーID: ");
String user = scanner.nextLine();
System.out.print("パスワード: ");
String password = scanner.nextLine();
credentials.add(new Credential(service, user, password));
save();
System.out.println("登録しました。");
} else if (input.equals("2")) {
System.out.print("サービス名を入力: ");
String keyword = scanner.nextLine();
for (Credential c : credentials) {
if (c.getService().equalsIgnoreCase(keyword)) {
System.out.println(c);
}
}
} else if (input.equals("0")) {
break;
} else {
System.out.println("無効な入力です。");
}
}
}
private static void save() throws Exception {
BufferedWriter writer = new BufferedWriter(new FileWriter(FILE));
for (Credential c : credentials) {
String encrypted = AESUtil.encrypt(c.getService() + "," + c.getUser() + "," + c.getPassword());
writer.write(encrypted);
writer.newLine();
}
writer.close();
}
private static void load() throws Exception {
File f = new File(FILE);
if (!f.exists()) return;
BufferedReader reader = new BufferedReader(new FileReader(FILE));
String line;
while ((line = reader.readLine()) != null) {
String decrypted = AESUtil.decrypt(line);
String[] parts = decrypted.split(",", 3);
credentials.add(new Credential(parts[0], parts[1], parts[2]));
}
reader.close();
}
}
セキュリティで注意すべき点
安全に扱うための基本対策
- 暗号鍵はアプリ内に埋め込まず、環境変数にする
- ファイルにはアクセス制限をかける(Windowsなら右クリック→プロパティ)
- 自動ログアウトやPINコードなどの追加でより安全に
応用アイデア:GUI化やエクスポート機能
より便利なツールにするには?
- SwingでGUI化して視覚的に使いやすく
- CSVファイルにエクスポートして外部連携
- マスターパスワード導入による保護強化
完成形コードまとめ
- Credential.java:登録情報のモデルクラス
- AESUtil.java:暗号化・復号の管理クラス
- PasswordManager.java:ツール本体
- password.dat:保存ファイル(暗号化済み)
まとめ:Javaでセキュアな管理を学ぼう
この記事では、Javaで作るパスワード管理ツールを紹介しました。
学べたこと:
- ファイル入出力の仕組み
- JavaによるAES暗号化の基礎
- シンプルなツール設計の流れ
このツールをベースに、自分仕様のセキュアなパスワード管理アプリへと発展させていってください!