JavaScript

346. (javaScript) [CryptoJS 라이브러리] - 자바스크립트 CryptoJS AES 및 PBKDF2 사용해 AES256 디코딩 - key , iv , salt

투케이2K 2024. 3. 5. 10:24

[개발 환경 설정]

개발 툴 : Edit++

개발 언어 : JavaScript

 

[소스 코드]

    <!-- ===================================================================================================== -->
    <!-- [CDN 주소 설정] -->
    <!-- ===================================================================================================== -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
    <!-- ===================================================================================================== -->






    <!-- ===================================================================================================== -->
    <!-- [자바스크립트 코드 지정] -->
    <!-- ===================================================================================================== -->
    <script>


        // =======================================================================
        // [자바스크립트 라이프 사이클 및 상태 변경 감지 부분]
        // =======================================================================
        window.onload = function() {
            console.log("")
            console.log("==============================================================================")
            console.log("[window onload] : [start]");
            console.log("==============================================================================")
            console.log("")


            /**
             * -------------------------------------------------
             * [요약 설명]
             * -------------------------------------------------
             * window.onload : 브라우저 로드 완료 상태를 나타냅니다 
             * -------------------------------------------------
             * CryptoJS : 데이터 암호화를 지원해주는 라이브러리입니다 (ex : aes, sha ...)
             * -------------------------------------------------
             * aes 암호화 : 비밀키 방식으로 인코딩, 디코딩 시 비밀키를 사용합니다
             * -------------------------------------------------
             * aes 256 : 비밀키 값이 32 바이트 값입니다
             * -------------------------------------------------
             * lv  바이트 배열값은 16 바이트 고정입니다
             * -------------------------------------------------
             * */


            // [초기 변수 선언]
            let secretKey = "0123456789abcdef0123456789abcdef" // [32 byte]
            let iv = "0123456789abcdef" // [16 byte]
            let salt = "0123456789abcdef0123456789abcdef" // [32 byte]

            const iterations = 10000

            const data = "4KpINm+YV8sEqzj8ccXIkw==" // [디코딩에 사용할 데이터]

            const key = CryptoJS.PBKDF2(secretKey, CryptoJS.enc.Utf8.parse(salt), {
                keySize: 256 / 32, // 키 길이 (32 바이트)
                iterations, // 반복 횟수
            })

            // [AES 디코딩 수행]
            const cipher = CryptoJS.AES.decrypt(data, key, {
                iv: CryptoJS.enc.Utf8.parse(iv), // [Enter IV (Optional) 지정 방식]
                padding: CryptoJS.pad.Pkcs7,
                mode: CryptoJS.mode.CBC // [cbc 모드 선택]
            });

            // [로그 출력 수행]
            console.log("")
            console.log("==============================================================================")
            console.log("[Log] :: [Result]")
            console.log("----------------------------------------------")
            console.log("secretKey : ", secretKey)
            console.log("----------------------------------------------")
            console.log("iv : ", iv)
            console.log("----------------------------------------------")
            console.log("salt : ", salt)
            console.log("----------------------------------------------")
            console.log("encrypted data : ", data)
            console.log("----------------------------------------------")
            console.log("decrypted data : ", cipher.toString(CryptoJS.enc.Utf8))
            console.log("==============================================================================")
            console.log("")


        };


    </script>
 

[결과 출력]

 

 

반응형