HOWTO · Java

자바의 AES 256

이 튜토리얼은 Java에서 AES 256을 구현하는 방법을 보여줍니다.

이 페이지의 내용

AES 256은 암호화 및 암호 해독 알고리즘입니다. 이 자습서는 Java에서 AES 256을 구현하여 데이터를 암호화하고 해독하는 방법을 보여줍니다.

자바의 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