Notice
Recent Posts
Recent Comments
Link
투케이2K
791. (Android/Java) [유틸 파일] getAES192DecodeString : Aes192 디코딩 수행 : key , iv 사용 본문
Android
791. (Android/Java) [유틸 파일] getAES192DecodeString : Aes192 디코딩 수행 : key , iv 사용
투케이2K 2024. 5. 5. 23:34[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : [getAES192DecodeString] : Aes192 디코딩 : key + iv 사용
// -----------------------------------------------------------------------------------------
public static String getAES192DecodeString(String aesSecretKey, String aesIv, String data) {
/**
* // -----------------------------------------
* [getAES192DecodeString 메소드 설명]
* // -----------------------------------------
* 1. Aes192 암호화 방식을 사용해 데이터 디코딩 수행 실시
* // -----------------------------------------
* 2. 호출 방법 : [aes 비밀 키 / aes iv 바이트 [16 바이트 고정] / 디코딩할 데이터]
*
* C_Encryption.getAES192DecodeString("0123456789abcdef01234567", "", "96Mzp/yW0lz/FjdWJkjljA==") // hello
*
* C_Encryption.getAES192DecodeString("0123456789abcdef01234567", "0123456789abcdef", "IYW6eSwJzjmDBeZHnWyjgg==") // hello
*
* // -----------------------------------------
* 3. 리턴 데이터 : aes 암호화 디코딩 된 데이터 반환
* // -----------------------------------------
* 4. AES Secret Key 참고 : [aes128 = 16 byte / aes192 = 24 byte / aes256 = 32 byte]
* // -----------------------------------------
* */
// [리턴 변수 선언]
String returnData = "";
// [로직 처리 실시]
try {
// [필수 데이터 널 여부 체크]
if (C_Util.stringNotNull(aesSecretKey) == true
&& aesSecretKey.length() == 24
&& C_Util.stringNotNull(data) == true){
// ----------------------------
// [key >> byte 변환]
byte key [] = aesSecretKey.getBytes("UTF-8");
// ----------------------------
// [iv 값 널 체크 실시]
byte iv [] = null;
if (C_Util.stringNotNull(aesIv) == true && aesIv.length() == 16){
iv = aesIv.getBytes("UTF-8");
}
else {
iv = new byte[16];
}
// ----------------------------
// [data >> byte 변환 (base64 디코딩)]
byte content [] = Base64.decode(data, Base64.DEFAULT);
// ----------------------------
// [AES 디코딩 수행]
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv); // [알고리즘 스펙]
SecretKeySpec newKey = new SecretKeySpec(key, "AES"); // [암호화 알고리즘]
Cipher cipher = null;
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // [패딩]
cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec); // [key 지정해 암호화 지정]
// ----------------------------
// [원본 문자열 데이터 반환 실시]
returnData = new String(cipher.doFinal(content), "UTF-8");
// ----------------------------
}
else {
// ===============================================================
S_Log._E_("Aes192 비밀키 사용해 디코딩 수행 실시", new String[]{
"ERROR :: aes192SecretKey 비밀키 , data 데이터 null 널 임"
});
// ===============================================================
}
} catch (Exception e) {
S_Log._printStackTrace_(null, S_FinalMsg.LOG_BUG_STATE, null, e);
}
// [로그 출력 실시]
//*
// ===============================================================
S_Log._D_("Aes192 비밀키 사용해 디코딩 수행 실시", new String[]{
"INPUT [KEY] :: " + String.valueOf(aesSecretKey),
"INPUT [IV] :: " + String.valueOf(aesIv),
"INPUT [DATA] :: " + String.valueOf(data),
"RETURN :: " + String.valueOf(returnData)
});
// ===============================================================
// */
// [리턴 반환 실시]
return returnData;
}
[결과 출력]
반응형
'Android' 카테고리의 다른 글
Comments