Blog categories

Comments

[JAVA] AES 암호화 (Encryption)

[JAVA] AES 암호화 (Encryption)

AES(Advanced Encryption Standard)는 과거 사용하던 DES(Data Encryption Standard)를 대체하기 위한 차세대 표준 암호화 알고리즘으로써, 데이터 암/복호화에 쓰이는 대칭 키 알고리즘 입니다. JAVA에서는 이러한 암/복호하 알고리즘들을 제공하고 있어 사용이 가능합니다. AES의 Block size는 128 bits, Key size는 128, 192, 256 bits로 사용 가능합니다.

  • 128-bit keys : 10 cycles
  • 192-bit keys : 12 cycles
  • 256-bit keys : 14 cycles

AES 암호화를 위한 단계

1. javax.cypto.Cipher 인스턴스 생성

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

2. Key 생성

Key를 지정하여 줍니다. Key는 SecureRandom을 사용하여 랜덤하게 생성하실 수도 있고, 지정하여 생성하실 수도 있습니다. Random 하게 생성하실 경우에는 추정이 불가한 SecureRandom 을 사용하셔야 합니다.

– Random 한 Key 생성
KeyGenerator generator = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
generator.init(128, random);
Key secureKey = generator.generateKey();
– 지정 Key 생성

지정 Key 생성 시, AES의 Key Spec은 128-bit, 192-bit, 256-bit으로 고정되어 있음으로 이에 맞추어 생성해주셔야 합니다. 따라서 다음과 같이 SecureKeySpec을 사용하여 생성합니다.

String key = "MY_KEY";
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

3. IvParameterSpec 생성

byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes);

4. Cipher 객체 초기화

cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

5. 평문 암호화

String msg = "암호화할 평문";
byte[] encrypt = cipher.doFinal(msg.getBytes("UTF-8"));

6. BASE64Encode

Base64.encodeToString(encrypt, 0);

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

div#stuning-header .dfd-stuning-header-bg-container {background-image: url(https://tech.sangron.com/wp-content/uploads/sites/2/2014/01/java_wallpaper_background.jpg);background-color: #3f3f3f;background-size: cover;background-position: top center;background-attachment: initial;background-repeat: no-repeat;}#stuning-header div.page-title-inner {min-height: 350px;}