【Android】保存されたsecretKey.key(鍵)、salt.key(ソルト)、iv.key(初期化ベクトル)を使用して、データを暗号化する方法

Android

必要な手順

保存されたデータの読み込み
鍵 (secretKey.key)、ソルト (salt.key)、初期化ベクトル (iv.key) をそれぞれファイルから読み込みます。

暗号器の初期化

読み込んだsecretKey と ivを用いて、 Chipherを暗号化モードに設定します。

データの暗号化

初期化した Chipherを使用してデータを暗号化します。

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.io.FileInputStream;
import java.io.ByteArrayOutputStream;

public void encryptData(String data, String storagePath) throws Exception {
    // 保存された鍵を読み込む
    byte[] encodedKey;
    try (FileInputStream keyIn = new FileInputStream(storagePath + "/secretKey.key")) {
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        byte[] temp = new byte[1024];
        int bytesRead;
        while ((bytesRead = keyIn.read(temp)) != -1) {
            buffer.write(temp, 0, bytesRead);
        }
        encodedKey = buffer.toByteArray();
    }
    SecretKey secretKey = new SecretKeySpec(encodedKey, "AES");

    // ソルトを読み込む(将来的に復号が必要な場合のみ必要)
    byte[] salt;
    try (FileInputStream saltIn = new FileInputStream(storagePath + "/salt.key")) {
        salt = saltIn.readAllBytes();
    }

    // 初期化ベクトル (IV) を読み込む
    byte[] iv;
    try (FileInputStream ivIn = new FileInputStream(storagePath + "/iv.key")) {
        iv = ivIn.readAllBytes();
    }
    IvParameterSpec ivSpec = new IvParameterSpec(iv);

    // AES 暗号器の初期化
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);

    // データの暗号化
    byte[] plaintext = data.getBytes("UTF-8");
    byte[] ciphertext = cipher.doFinal(plaintext);

    // 暗号化結果を表示または保存
    System.out.println("Encrypted Data: " + javax.xml.bind.DatatypeConverter.printHexBinary(ciphertext));
}

説明

鍵 (secretKey.key) の読み込み: 鍵をSecretKeySpec として再構築します。

初期化ベクトル (iv.key) の読み込み: IV を IvParameterSpecとして読み込んで利用します。

暗号器 (Chiher) の設定: を使用して AES/CBC/PKCS5Padding のモードを設定します。

暗号化結果: 暗号化されたデータを で表示していますが、必要に応じてファイルに保存も可能です。

注意点

暗号化モードには AES/CBC/PKCS5Paddingを使用しています。復号化の際にも同じモードを利用してください。

必ず同じソルト (salt.key) と IV (iv.key) を使用してください。これらが一致しないと復号に失敗します。

暗号化されたデータを適切な場所に保存するか、必要ならファイル出力してください。

コメント