Notice
Recent Posts
Recent Comments
Link
투케이2K
101. (spring/스프링) cipher 사용해 aes256 암호화 인코딩 , 디코딩 수행 실시 본문
[개발 환경 설정]
개발 툴 : inteli j
개발 언어 : spring
[소스 코드]
// TODO [Aes256 인코딩 : key + iv 사용]
public static String getAES256EncodeString(String aes256SecretKey, byte[] aes256ivBytes, String data) {
/**
* // -----------------------------------------
* [getAES256EncodeString 메소드 설명]
* // -----------------------------------------
* 1. Aes256 암호화 방식을 사용해 데이터 인코딩 수행 실시
* // -----------------------------------------
* 2. 호출 방법 : [aes 비밀 키 / aes iv 바이트 [16 바이트 고정] / 인코딩할 데이터]
* - C_Encryption.getAES256EncodeString("0123456789abcdef0123456789abcdef", new byte[16], "hello"); // [byte 공백]
* - C_Encryption.getAES256EncodeString("0123456789abcdef0123456789abcdef", "0123456789abcdef".getBytes("UTF-8"), "hello"); // [byte 지정]
* // -----------------------------------------
* 3. 리턴 결과 : aes 암호화 인코딩된 데이터를 base64 데이터로 리턴 실시
* // -----------------------------------------
* 4. AES Secret Key 참고 : [aes128 = 16 byte / aes192 = 24 byte / aes256 = 32 byte]
* // -----------------------------------------
* */
// [aes 암호화 인코딩 수행 실시]
String result = "";
try {
byte[] textBytes = data.getBytes("UTF-8");
AlgorithmParameterSpec ivSpec = new IvParameterSpec(aes256ivBytes); // [알고리즘 스펙]
SecretKeySpec newKey = new SecretKeySpec(aes256SecretKey.getBytes("UTF-8"), "AES"); // [암호화 알고리즘]
Cipher cipher = null;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // [패딩]
cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec); // [key 지정해 암호화 지정]
// [리턴 데이터 반환 실시 : base64 데이터로 반환 실시]
result = String.valueOf(new String(Base64.encodeBase64(cipher.doFinal(textBytes))));
} catch (Exception e) {
e.printStackTrace();
}
// [로그 출력]
/*
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("getAES256EncodeString"));
System.out.println("[INPUT] [KEY] : "+String.valueOf(aes256SecretKey));
System.out.println("[INPUT] [IV] : "+String.valueOf(Arrays.toString(aes256ivBytes)));
System.out.println("[INPUT] [DATA] : "+String.valueOf(data));
System.out.println("[RETURN] : "+String.valueOf(result));
System.out.println("================================================");
System.out.println("\n");
// */
// [리턴 데이터 반환]
return result;
}
// TODO [Aes256 디코딩 : key + iv 사용]
public static String getAES256DecodeString(String aes256SecretKey, byte[] aes256ivBytes, String data) {
/**
* // -----------------------------------------
* [getAES256DecodeString 메소드 설명]
* // -----------------------------------------
* 1. Aes256 암호화 방식을 사용해 데이터 디코딩 수행 실시
* // -----------------------------------------
* 2. 호출 방법 : [aes 비밀 키 / aes iv 바이트 [16 바이트 고정] / base64로 된 aes 디코딩 데이터]
* - C_Encryption.getAES256DecodeString("0123456789abcdef0123456789abcdef", new byte[16], "pZwJZBLuy3mDACEQT4YTBw=="); // [byte 공백]
* - C_Encryption.getAES256DecodeString("0123456789abcdef0123456789abcdef", "0123456789abcdef".getBytes("UTF-8"), "UQdw44JDqzsxYpkSCwXDIA=="); // [byte 지정]
* // -----------------------------------------
* 3. 리턴 결과 : 원본 문자열 데이터 리턴
* // -----------------------------------------
* 4. AES Secret Key 참고 : [aes128 = 16 byte / aes192 = 24 byte / aes256 = 32 byte]
* // -----------------------------------------
* */
// [aes 암호화 디코딩 수행 실시]
String result = "";
try {
// [인풋으로 들어온 base64 문자열 데이터를 가지고 디코딩 수행 실시]
byte[] textBytes = Base64.decodeBase64(data);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(aes256ivBytes); // [알고리즘 스펙]
SecretKeySpec newKey = new SecretKeySpec(aes256SecretKey.getBytes("UTF-8"), "AES"); // [암호화 알고리즘]
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // [패딩]
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec); // [key 지정해 암호화 지정]
// [리턴 데이터 반환 실시 : 원본 문자열 데이터 반환]
result = new String(cipher.doFinal(textBytes), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
// [로그 출력]
/*
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("getAES256DecodeString"));
System.out.println("[INPUT] [KEY] : "+String.valueOf(aes256SecretKey));
System.out.println("[INPUT] [IV] : "+String.valueOf(Arrays.toString(aes256ivBytes)));
System.out.println("[INPUT] [DATA] : "+String.valueOf(data));
System.out.println("[RETURN] : "+String.valueOf(result));
System.out.println("================================================");
System.out.println("\n");
// */
// [리턴 결과 반환]
return result;
}
반응형
'Spring' 카테고리의 다른 글
Comments