HOWTO · Java

Java の AES 256

このチュートリアルでは、Java で AES 256 を実装する方法を示します。

AES 256 は、暗号化および復号化アルゴリズムです。 このチュートリアルでは、Java で AES 256 を実装してデータを暗号化および復号化する方法を示します。

Java の AES 256

AES は、ソフトウェア、ハードウェア、および制限された環境で簡単に実装できる対称暗号化アルゴリズムです。 また、さまざまな攻撃に対する優れた防御も提供します。

AES は、サイズが 128、192、および 256 ビットの鍵を使用して、ブロック暗号の形式で 128 ビットのブロックを処理できます。 各暗号は、128 ビットのブロックでデータを復号化または暗号化します。

AES は、受信者と送信者の両方が同じ秘密鍵を使用し、知っている必要がある、同じ暗号化および復号化プロセスを使用します。 このチュートリアルでは、AES 256 を使用してデータを暗号化および復号化する方法を示します。

AES 256 を使用して Java でデータを暗号化する

以下の Java コードは、AES 256 暗号化を実装しています。

package delftstack;

import java.nio.charset.StandardCharsets;
import java.security.spec.KeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AES_Encrypt {
  private static final String SECRET_KEY = "Delftstack";
  private static final String SALT = "Tutorial";

  public static String encrypt_AES(String StringToEncrypt) {
    try {
      byte[] a = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      IvParameterSpec Iv_Specifications = new IvParameterSpec(a);

      SecretKeyFactory Secret_Key_Factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
      KeySpec Key_Spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);
      SecretKey Temp_Secret_Key = Secret_Key_Factory.generateSecret(Key_Spec);
      SecretKeySpec Secret_Key = new SecretKeySpec(Temp_Secret_Key.getEncoded(), "AES");

      Cipher AES_Cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      AES_Cipher.init(Cipher.ENCRYPT_MODE, Secret_Key, Iv_Specifications);
      return Base64.getEncoder().encodeToString(
          AES_Cipher.doFinal(StringToEncrypt.getBytes(StandardCharsets.UTF_8)));
    } catch (Exception e) {
      System.out.println("Error while encrypting: " + e.toString());
    }
    return null;
  }

  public static void main(String[] args) {
    String Original_String = "www.delftstack.com";

    String Encrypted_String = AES_Encrypt.encrypt_AES(Original_String);

    System.out.println(Original_String);
    System.out.println(Encrypted_String);
  }
}

上記のコードの出力は次のとおりです。

www.delftstack.com
fV2B4Is2xva8C+SieUg01vRbGmZNbyTzV9+llBdv7kM=

AES 256 を使用して Java でデータを復号化する

以下のコードは、Java での AES 256 復号化を示しています。

package delftstack;

import java.nio.charset.StandardCharsets;
import java.security.spec.KeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AES_Decrypt {
  private static final String SECRET_KEY = "Delftstack";
  private static final String SALT = "Tutorial";

  public static String decrypt_AES(String strToDecrypt) {
    try {
      byte[] a = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
      IvParameterSpec IV_Specifications = new IvParameterSpec(a);

      SecretKeyFactory Secret_Key_Factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
      KeySpec Key_Spec = new PBEKeySpec(SECRET_KEY.toCharArray(), SALT.getBytes(), 65536, 256);
      SecretKey Temp_Secret_Key = Secret_Key_Factory.generateSecret(Key_Spec);
      SecretKeySpec Secret_Key = new SecretKeySpec(Temp_Secret_Key.getEncoded(), "AES");

      Cipher AES_Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
      AES_Cipher.init(Cipher.DECRYPT_MODE, Secret_Key, IV_Specifications);
      return new String(AES_Cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    } catch (Exception e) {
      System.out.println("Error while decrypting: " + e.toString());
    }
    return null;
  }
  public static void main(String[] args) {
    String Encrypted_String = "fV2B4Is2xva8C+SieUg01vRbGmZNbyTzV9+llBdv7kM=";

    String Decrypted_String = AES_Decrypt.decrypt_AES(Encrypted_String);

    System.out.println(Encrypted_String);
    System.out.println(Decrypted_String);
  }
}

上記のコードは、AES 256 を使用して暗号化された文字列を復号化します。出力を参照してください。

fV2B4Is2xva8C+SieUg01vRbGmZNbyTzV9+llBdv7kM=
www.delftstack.com