투케이2K

104. (javascript/자바스크립트) CryptoJS 사용해 aes 128 , aes 256 비밀키 인코딩 (encode) 및 디코딩 (decode) 수행 실시 본문

JavaScript

104. (javascript/자바스크립트) CryptoJS 사용해 aes 128 , aes 256 비밀키 인코딩 (encode) 및 디코딩 (decode) 수행 실시

투케이2K 2021. 7. 28. 11:45
반응형

[개발 환경 설정]

개발 툴 : Edit++

개발 언어 : javascript


[소스 코드]

    <!-- Crypto CDN 로드 -->    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>



    <!-- 내부 JS 지정 -->
    <script>

    	/*
    	[JS 요약 설명]
    	1. window.onload : 브라우저 로드 완료 상태를 나타냅니다 
    	2. CryptoJS : 데이터 암호화를 지원해주는 라이브러리입니다 (ex : aes, sha ...)
    	3. aes 암호화 : 비밀키 방식으로 인코딩, 디코딩 시 비밀키를 사용합니다
    	4. aes 128 : 비밀키 값이 16 바이트 값입니다
    	5. aes 192 : 비밀키 값이 24 바이트 값입니다
    	6. aes 256 : 비밀키 값이 32 바이트 값입니다
    	7. 추가 설명 : 필요 시 추가 lv 설정을 할 수 있으며, lv  바이트 배열값은 16 바이트 고정입니다
    	8. 암호화 지원 확인 종류 : https://www.npmjs.com/package/crypto-js
    	*/
   	
    	
    	/* [html 최초 로드 및 이벤트 상시 대기 실시] */
    	window.onload = function() {
    		console.log("");
    		console.log("[window onload] : [start]");
    		console.log("");


    		// [aes128 인코딩 함수 호출 실시]
    		aes128Encode(aes128SecretKey, "", "hello");    		    		

    		// [aes128 디코딩 함수 호출 실시]
    		aes128Decode(aes128SecretKey, "", aes128EncodeData);


    		// [aes256 인코딩 함수 호출 실시]
    		aes256Encode(aes256SecretKey, "", "hello");    		    		

    		// [aes256 디코딩 함수 호출 실시]
    		aes256Decode(aes256SecretKey, "", aes256EncodeData);
    	};


    	/* [aes 128 인코딩, 디코딩에 필요한 전역 변수 선언] */
    	var aes128SecretKey = "0123456789abcdef"; // key 값 16 바이트
    	var aes128Iv = "0123456789abcdef"; //iv 16 바이트
    	var aes128EncodeData = "";
    	var aes128DecodeData = "";


    	/* [aes128Encode 이벤트 함수 정의] */
    	function aes128Encode(secretKey, Iv, data){
    		console.log("");
    		console.log("[aes128Encode] : [start]");
    		console.log("[secretKey] : " + secretKey); 
    		console.log("[Iv] : " + Iv); 
    		console.log("[data] : " + data);  		
    		console.log("");

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

    		// [인코딩 된 데이터 확인 실시]
    		aes128EncodeData = cipher.toString();
    		console.log("");
    		console.log("[aes128Encode] : [encode]");
    		console.log("[data] : " + aes128EncodeData);  		
    		console.log("");
    	};


    	/* [aes128Decode 이벤트 함수 정의] */
    	function aes128Decode(secretKey, Iv, data){
    		console.log("");
    		console.log("[aes128Decode] : [start]");
    		console.log("[secretKey] : " + secretKey); 
    		console.log("[Iv] : " + Iv); 
    		console.log("[data] : " + data);  		
    		console.log("");

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

    		// [인코딩 된 데이터 확인 실시]
    		aes128DecodeData = cipher.toString(CryptoJS.enc.Utf8);    		
    		console.log("");
    		console.log("[aes128Decode] : [decode]");
    		console.log("[data] : " + aes128DecodeData);  		
    		console.log("");
    	};




    	/* [aes 256 인코딩, 디코딩에 필요한 전역 변수 선언] */
    	var aes256SecretKey = "0123456789abcdef0123456789abcdef"; // key 값 32 바이트
    	var aes256Iv = "0123456789abcdef"; //iv 16 바이트
    	var aes256EncodeData = "";
    	var aes256DecodeData = "";


    	/* [aes128Encode 이벤트 함수 정의] */
    	function aes256Encode(secretKey, Iv, data){
    		console.log("");
    		console.log("[aes256Encode] : [start]");
    		console.log("[secretKey] : " + secretKey); 
    		console.log("[Iv] : " + Iv); 
    		console.log("[data] : " + data);  		
    		console.log("");

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

    		// [인코딩 된 데이터 확인 실시]
    		aes256EncodeData = cipher.toString();
    		console.log("");
    		console.log("[aes256Encode] : [encode]");
    		console.log("[data] : " + aes256EncodeData);  		
    		console.log("");
    	};


    	/* [aes256Decode 이벤트 함수 정의] */
    	function aes256Decode(secretKey, Iv, data){
    		console.log("");
    		console.log("[aes256Decode] : [start]");
    		console.log("[secretKey] : " + secretKey); 
    		console.log("[Iv] : " + Iv); 
    		console.log("[data] : " + data);  		
    		console.log("");

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

    		// [인코딩 된 데이터 확인 실시]
    		aes256DecodeData = cipher.toString(CryptoJS.enc.Utf8);    		
    		console.log("");
    		console.log("[aes256Decode] : [decode]");
    		console.log("[data] : " + aes256DecodeData);  		
    		console.log("");
    	};
    	
    </script>

[결과 출력]


[요약 설명]

/*

[JS 요약 설명]

1. window.onload : 브라우저 로드 완료 상태를 나타냅니다

2. CryptoJS : 데이터 암호화를 지원해주는 라이브러리입니다 (ex : aes, sha ...)

3. aes 암호화 : 비밀키 방식으로 인코딩, 디코딩 시 비밀키를 사용합니다

4. aes 128 : 비밀키 값이 16 바이트 값입니다

5. aes 192 : 비밀키 값이 24 바이트 값입니다

6. aes 256 : 비밀키 값이 32 바이트 값입니다

7. 추가 설명 : 필요 시 추가 lv 설정을 할 수 있으며, lv 바이트 배열값은 16 바이트 고정입니다

8. 암호화 지원 확인 종류 : https://www.npmjs.com/package/crypto-js

*/


[온라인 AES 인코딩, 디코딩 데이터 확인 방법]

https://blog.naver.com/kkh0977/222447254921

 

48. aes 암호화 인코딩, 디코딩 결과 온라인 사이트에서 확인 방법

[설 명] 1. 온라인에서 aes 암호화 인코딩, 디코딩을 수행할 수 있는 방법입니다 [방법 설명] 1. aes 인코...

blog.naver.com


 

반응형
Comments