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);
AES Encryption using 256 bit Encryption key and IV spec parameter
C# Corner