Notice
Recent Posts
Recent Comments
Link
투케이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
반응형
'JavaScript' 카테고리의 다른 글
Comments