2021-09-18
사용자 및 회원의 정보중 아이디 비밀번호 휴대폰 번호 이메일 등... 민감한 정보들이 있다. 이러한 정보들을 암호화 없이 데이터베이스 저장할 경우 법적으로 문제가 될 수 있는데, 이러한 경우에 필요한 과정이 바로 암호화이다. 오늘은 많은 암호화 방법 중 간단하고 강력한 AES-256 암호화하는 과정을 빠르게 알아보도록 하자.
- 예제
예제는 간단히 사용자의 아이디를 암호화하는 과정을 나타낸다. 여러 암호화 할 데이터를 리스트 형식으로 받아서 루프를 돌려 처리해도 되며, 사용방법은 본인의 자유이다.
package com.win.test.controller;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class a_00test_aes256 {
public static void main(String[] args) {
//알고리즘
String alg = "AES/CBC/PKCS5Padding";
//키
String aesKey = "abcdefghabcdefghabcdefghabcdefgh"; //32byte
String aesIv = "0123456789abcdef"; //16byte
//암호화 할 유저 아이디
String userId ="abc123";
//암호화된 유저 아이디
String encId="";
//알고리즘 aes-256 **********[암호화]**********
try {
Cipher cipher = Cipher.getInstance(alg);
//키로 비밀키 생성
SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(), "AES");
//iv 로 spec 생성
IvParameterSpec ivParamSpec = new IvParameterSpec(aesIv.getBytes());
//암호화 적용
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivParamSpec);
//암호화 실행
byte[] encrypted1 = cipher.doFinal(userId.getBytes("UTF-8")); // ID 암호화(인코딩 설정)
encId = Base64.getEncoder().encodeToString(encrypted1); // 암호화 인코딩 후 저장
System.out.println("암호화된 유저 아이디 -> " + encId);
}catch (Exception e) {
System.out.println("암호화 중 오류 발생 ");
e.printStackTrace();
}
//---------------------------------------------------------------------------
//----암호화 해석 코드 **********[복호화]**********
try {
Cipher cipher = Cipher.getInstance(alg);
SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(), "AES");
IvParameterSpec ivParamSpec = new IvParameterSpec(aesIv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivParamSpec);
//암호 해석
byte[] decodedBytes = Base64.getDecoder().decode(encId);
byte[] decrypted = cipher.doFinal(decodedBytes);
String result = new String(decrypted);
System.out.println("복호화한 유저 아이디 -> " + result);
}catch (Exception e) {
e.printStackTrace();
}
//---------------------------------------------------------------------------
}
}
위와 같은 코드로 암호화와 복호화를 진행하면 된다. 여기서 중요한 부분은 키값과 IV(초기화 백터 값) 이 두 가지이며 키값은 32byte IV 값은 16byte 값으로 지정해 주면 된다. 잘 모르겠으면 영어 숫자 기준 키값은 32자리 IV 값은 16자리 적어 넣어주면 된다. 한자리라도 적거나 크면 컴파일에서 에러가 나니 정확히 확인해 주는 것이 좋다.
메인 이미지 출처 : Photo by Dmitry Osipenko on Unsplash