투케이2K

790. (Android/Java) [유틸 파일] getAES192EncodeString : Aes192 인코딩 수행 : key , iv 사용 본문

Android

790. (Android/Java) [유틸 파일] getAES192EncodeString : Aes192 인코딩 수행 : key , iv 사용

투케이2K 2024. 5. 5. 23:25
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [getAES192EncodeString] : Aes192 인코딩 : key + iv 사용
    // -----------------------------------------------------------------------------------------
    public static String getAES192EncodeString(String aesSecretKey, String aesIv, String data) {

        /**
         * // -----------------------------------------
         * [getAES192EncodeString 메소드 설명]
         * // -----------------------------------------
         * 1. Aes192 암호화 방식을 사용해 데이터 인코딩 수행 실시
         * // -----------------------------------------
         * 2. 호출 방법 : [aes 비밀 키 / aes iv 바이트 [16 바이트 고정] / 인코딩할 데이터]
         *
         * C_Encryption.getAES192EncodeString("0123456789abcdef01234567", "", "hello") // 96Mzp/yW0lz/FjdWJkjljA==
         *
         * C_Encryption.getAES192EncodeString("0123456789abcdef01234567", "0123456789abcdef", "hello") // IYW6eSwJzjmDBeZHnWyjgg==
         *
         * // -----------------------------------------
         * 3. 리턴 데이터 : aes 암호화 인코딩된 데이터를 base64 데이터로 리턴 실시
         * // -----------------------------------------
         * 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 변환]
                byte content [] = data.getBytes("UTF-8");
                // ----------------------------
                // [AES 인코딩 수행]
                AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv); // [알고리즘 스펙]
                SecretKeySpec newKey = new SecretKeySpec(key, "AES"); // [암호화 알고리즘]
                Cipher cipher = null;
                cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // [패딩]
                cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec); // [key 지정해 암호화 지정]
                // ----------------------------
                // [base64 데이터로 반환 실시]
                returnData = Base64.encodeToString(cipher.doFinal(content), Base64.DEFAULT);
                // ----------------------------
            }
            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;
    }
 

[결과 출력]


반응형
Comments