이 기사에서는 JS가 구현 한 Base64 암호화, MD5 암호화 및 SHA1 암호화에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
1. Base64 암호화
base64.js 파일을 페이지에 소개하면 호출 메소드가 다음과 같습니다.
<! docType html> <html> <head> <meta charset = "utf-8"> <title> base64 암호화 </title> <script type = "text/javaScript"src = "base64.js"> </script> <script type = "text/javascript"> var b = new Base64 (); var str = b.encode ( "admin : admin"); ALERT ( "Base64 Encode :" + str); // decrypt str = b.decode (str); ALERT ( "Base64 Decode :" + str); </script> </head> <body> </body> </html>
2. MD5 암호화
페이지의 MD5.JS 파일을 참조하고 호출 메소드는 다음과 같습니다.
<! docType html> <html> <head> <meta charset = "utf-8"> <title> md5 암호화 </title> <script type = "text/ecmascript"src = "md5.js"> </script> <script> <text/javascript "> var hash = hex_md5 ("123dafd "); Alert (Hash) </script> </head> <hod> </body> </html>3. SHA1 암호화
이것이 가장 안전한 암호화라고합니다
이 페이지는 SHA1.JS를 소개하고 호출 방법은 다음과 같습니다
<! docType html> <html> <head> <meta charset = "utf-8"> <title> sha1 암호화 </title> <script type = "text/ecmascript"src = "sha1.js"> </script> <script> <text/javascript "). ALERT (SHA) </script> </head> <body> </body> </html>
JS의 소스 코드는 다음과 같습니다
Base64.js :
/**** Base64 Encode /Decode ** @author haitao.tu*@Date 2010-04-26*@Email [email protected]**/function Base64 () {// 사유지 _Keystr = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/="; // 인코딩을위한 공개 메소드 is.encode = function (input) {var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; 입력 = _utf8_encode (입력); while (i <input.length) {chr1 = input.charcodeat (i ++); chr2 = input.charcodeat (i ++); chr3 = input.charcodeat (i ++); ENC1 = chr1 >> 2; ENC2 = ((chr1 & 3) << 4) | (chr2 >> 4); ENC3 = ((chr2 & 15) << 2) | (chr3 >> 6); ENC4 = chr3 & 63; if (isnan (chr2)) {enc3 = enc4 = 64; } else if (isnan (chr3)) {enc4 = 64; } output = output + _keyst.charat (enc1) + _keyst.charat (enc2) + _keyst.charat (enc3) + _keyst.charat (enc4); } 리턴 출력; } // decoding this.decode = function (input) {var output = ""; var chr1, chr2, chr3; VAR ENC1, ENC2, ENC3, ENC4; var i = 0; 입력 = input.replace (/[^a-za-z0-9/+/// =]/g, ""); while (i <input.length) {enc1 = _keystr.indexof (input.charat (i ++)); enc2 = _keyst.indexof (input.charat (i ++)); enc3 = _keyst.indexof (input.charat (i ++)); enc4 = _keyst.indexof (input.charat (i ++)); chr1 = (enc1 << 2) | (ENC2 >> 4); chr2 = ((Enc2 & 15) << 4) | (ENC3 >> 2); chr3 = ((Enc3 & 3) << 6) | ENC4; 출력 = 출력 + string.fromcharcode (chr1); if (enc3! = 64) {output = output + string.fromcharcode (chr2); } if (enc4! = 64) {output = output + string.fromcharcode (chr3); }} output = _utf8_decode (출력); 리턴 출력; } // UTF-8 인코딩 _utf8_encode = function (string) {String = String.replace (// r/n/g, "/n"); var utftext = ""; for (var n = 0; n <string.length; n ++) {var c = string.charcodeat (n); if (c <128) {utftext += string.fromcharcode (c); } else if ((c> 127) && (c <2048)) {utftext += string.fromcharcode ((c >> 6) | 192); UTFTEXT += String.FromCharCode ((C & 63) | 128); } else {utftext += string.fromCharCode ((C >> 12) | 224); UTFTEXT += String.FromCharCode ((C >> 6) & 63) | 128); UTFTEXT += String.FromCharCode ((C & 63) | 128); }} return utfText; } // UTF-8 디코딩에 대한 개인 메소드 _UTF8_DECODE = function (utfText) {var string = ""; var i = 0; var c = c1 = c2 = 0; while (i <utftext.length) {c = utftext.charcodeat (i); if (c <128) {string += string.fromcharcode (c); i ++; } else if ((c> 191) && (c <224)) {c2 = utftext.charcodeat (i+1); String += string.fromcharCode (((C & 31) << 6) | (C2 & 63)); i += 2; } else {c2 = utftext.charcodeat (i+1); c3 = utftext.charcodeat (i+2); String += string.fromCharCode (((C & 15) << 12) | ((C2 & 63) << 6) | (C3 & 63)); I += 3; }} return string; }}
md5.js :
/ * * RSA Data Security, Inc. MD5 메시지의 JavaScript 구현 * RFC 1321에 정의 된 바와 같이 Digest 알고리즘 * 버전 2.1 저작권 (c) Paul Johnston 1999-2002. 자세한 내용은 http://pajhome.org.uk/crypt/md5. * // * * 구성 가능한 변수. 서버 측 *과 호환되도록 조정해야 할 수도 있지만 대부분의 경우 기본값이 작동합니다. */var hexcase = 0; /* 육각 출력 형식. 0- 소문자; 1- 대문자 */var b64pad = ""; /* Base-64 패드 문자. "="엄격한 RFC 준수 */var chrsz = 8; /* 입력 문자 당 비트. 8 -ASCII; 16 -UNICODE * // * * 이들은 일반적으로 호출하려는 기능입니다 * 문자열 인수를 취하고 16 진수 또는 기본 인코딩 된 문자열 */기능 HEX_MD5 (S) {return binl2Hex (Core_MD5 (S), S.Length * chrsz); binl2b64 (core_md5 (str2binl (s), s.length * chrsz);} 함수 str_md5 (s) {return binl2str (core_md5 (str2binl (s), s.length * chrsz));} 함수 hex_hmac_md5 (key, data) {return binl2hex (core_hm) 데이터)); } 함수 B64_HMAC_MD5 (키, 데이터) {return binl2b64 (core_hmac_md5 (키, 데이터)); } 함수 str_hmac_md5 (키, 데이터)); } 함수 str_hmac_md5 (키, 데이터) {return binl2str (core_hmac_md5 (키, 데이터)); }/ * * VM이 작동하는지 확인하기 위해 간단한 자체 테스트를 수행하십시오 */함수 md5_vm_test () {return hex_md5 ( "abc") == "900150983cd24fb0d6963f7d28e17f72";}/ * * */ontray의 md5를 계산합니다. Core_md5 (X, Len) { / * Append Padding * / x [Len >> 5] | = 0x80 << ((Len) % 32); x [(((Len + 64) >>> 9) << 4) + 14] = Len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for (var i = 0; i <x.length; i += 16) {var old = a; var oldb = b; var oldc = c; var old = d; a = md5_ff (a, b, c, d, x [i+ 0], 7, -680876936); d = md5_ff (d, a, b, c, x [i+ 1], 12, -389564586); c = md5_ff (c, d, a, b, x [i+ 2], 17, 606105819); b = md5_ff (b, c, d, a, x [i+ 3], 22, -1044525330); a = md5_ff (a, b, c, d, x [i+ 4], 7, -176418897); d = md5_ff (d, a, b, c, x [i+ 5], 12, 1200080426); c = md5_ff (c, d, a, b, x [i+ 6], 17, -1473231341); b = md5_ff (b, c, d, a, x [i+ 7], 22, -45705983); a = md5_ff (a, b, c, d, x [i+ 8], 7, 1770035416); d = md5_ff (d, a, b, c, x [i+ 9], 12, -1958414417); c = md5_ff (c, d, a, b, x [i+10], 17, -42063); b = md5_ff (b, c, d, a, x [i+11], 22, -1990404162); a = md5_ff (a, b, c, d, x [i+12], 7, 1804603682); d = md5_ff (d, a, b, c, x [i+13], 12, -40341101); c = md5_ff (c, d, a, b, x [i+14], 17, -1502002290); b = md5_ff (b, c, d, a, x [i+15], 22, 1236535329); a = md5_gg (a, b, c, d, x [i+ 1], 5, -165796510); d = md5_gg (d, a, b, c, x [i+ 6], 9, -1069501632); c = md5_gg (c, d, a, b, x [i+ 1], 14, 643717713); b = md5_gg (b, c, d, a, x [i+ 0], 20, -373897302); a = md5_gg (a, b, c, d, x [i+ 5], 5, -701558691); d = md5_gg (d, a, b, c, d, x [i+ 5], 5, -701558691); d = md5_gg (d, a, b, c, c, x [i+10], 9, 38016083); c = md5_gg (c, d, a, b, x [i+15], 14, -660478335); b = md5_gg (b, c, d, a, x [i+ 4], 20, -405537848); a = md5_gg (a, b, c, d, x [i+ 9], 5, 568446438); d = md5_gg (d, a, b, c, x [i+14], 9, -1019803690); c = md5_gg (c, d, a, b, x [i+ 3], 14, -187363961); b = md5_gg (b, c, d, a, x [i+ 8], 20, 1163531501); a = md5_gg (a, b, c, d, x [i+13], 5, -1444681467); d = md5_gg (d, a, b, c, x [i+ 2], 9, -51403784); c = md5_gg (c, d, a, b, x [i+ 7], 14, 1735328473); b = md5_gg (b, c, d, a, x [i+12], 20, -1926607734); a = md5_hh (a, b, c, d, x [i+ 5], 4, -378558); d = md5_gg (b, c, d, a, x [i+ 5], 4, -378558); d = md5_hh (d, a, b, c, x [i+ 8], 11, -2022574463); c = md5_hh (c, d, a, b, x [i+11], 16, 1839030562); b = md5_hh (b, c, d, a, x [i+14], 23, -35309556); a = md5_hh (a, b, c, d, x [i+ 1], 4, -1530992060); d = md5_hh (d, a, b, c, x [i+ 4], 11, 1272893353); C = MD5_HH (C, D, A, B, X [I+ 7], 16, -155497632); b = md5_hh (b, c, d, a, x [i+10], 23, -1094730640); a = md5_hh (a, b, c, d, x [i+13], 4, 681279174); d = md5_hh (d, a, b, c, x [i+ 0], 11, -358537222); C = MD5_HH (C, D, A, B, X [I+ 3], 16, -722521979); b = md5_hh (b, c, d, a, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 0], 11, -358537222); C = MD5_HH (C, D, A, B, X [I+ 3], 16, -722521979); b = md5_hh (b, c, d, a, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 23, 76029189); a = md5_hh (a, b, c, d, x [i+ 6], 9], 4, -640364487); d = md5_hh (d, a, b, c, x [i+12], 11, -421815835); C = MD5_HH (C, D, A, B, X [I+15], 16, 530742520); b = md5_hh (b, c, d, a, x [i+ 2], 23, -995338651); a = md5_ii (a, b, c, d, x [i+ 0], 6, -198630844); d = md5_ii (d, a, b, c, x [i+ 7], 10, 1126891415); C = MD5_II (C, D, A, B, X [I+14], 15, -1416354905); b = md5_ii (b, c, d, a, x [i+ 5], 21, -57434055); a = md5_ii (a, b, c, d, x [i+12], 6, 1700485571); d = md5_ii (d, a, b, c, x [i+ 3], 10, -1894986606); C = MD5_II (C, D, A, B, X [I+10], 15, -1051523); b = md5_ii (b, c, d, a, x [i+ 1], 21, -2054922799); a = md5_ii (a, b, c, d, x [i+ 8], 6, 1873313359); d = md5_ii (d, a, b, c, x [i+15], 10, -30611744); c = md5_ii (c, d, a, b, x [i+ 6], 15, -1560198380); b = md5_ii (b, c, d, a, x [i+13], 21, 1309151649); a = md5_ii (a, b, c, d, x [i+ 4], 6, -145523070); d = md5_ii (d, a, b, c, x [i+11], 10, -1120210379); c = md5_ii (c, d, a, b, x [i+ 2], 15, 718787259); b = md5_ii (b, c, d, a, x [i+ 9], 21, -343485551); a = safe_add (a, olda); b = safe_add (b, oldb); c = safe_add (c, oldc); d = safe_add (d, oldd); } return array (a, b, c, d);}/ * *이 함수는 알고리즘이 사용하는 4 가지 기본 작업을 구현합니다. */function md5_cmn (q, a, b, x, s, s, t) {return safe_add (bit_rol (safe_add (safe_add (a, q), safe_add (x, t), s), b); & d), a, b, b, x, s, t);} 함수 md5_gg (a, b, b, c, d, x, s, t) {return md5_cmn ((b & d) | (c & (~ d)), a, b, x, s, t); b, x, s, t);} 함수 md5_ii (a, b, b, c, d, x, s, t) {return md5_cmn (c ^ (b | (~ d)), a, b, x, s, t);}/ * * * Key 및 일부 데이터의 HMAC-md5 계산 */function core_hmac_md5 (key, data) {key, data); if (bkey.length> 16) bkey = key.length * array (16); hash = core_md5 (ipad.concat (data)), 512 + data.length * chrsz); var LSW = (x & 0xfff) var MSW = (x >> 16); >>> (32 -cnt);}/ * * 문자열을 Little -Endian 단어 배열로 변환하십시오. * 255는 STR2BINL (str2binl)을 조용히 무시합니다. bin [i >> 5] | = str.charcodeat (i/chrsz) & 마스크) << (i%32);}; += 문자. "0123456789ABCDEF"; ((i%4) * 8)) & 0xf); "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789 +/"; << 16) | (Binarray [i+1 >> 2] >> 8 * ((i+1)%4)) << 8) | b64pad; else str += tab.charat ((트리플렛 >> 6*(3-J)) & 0x3f);SHA1.JS :
/ * * FIPS 180-1 버전 2.1-Beta 저작권 Paul Johnston 2000-2002에서 정의 된 SHA-1의 보안 해시 알고리즘, SHA-1의 JavaScript 구현. * 기타 기고자 : Greg Holt, Andrew Kepert, Ydnar, Lostinet * BSD 라이센스에 따라 배포 됨 * http://pajhome. 세부 사항. * // * * 구성 가능한 변수. 서버 측 *과 호환되도록 조정해야 할 수도 있지만 대부분의 경우 기본값이 작동합니다. */var hexcase = 0; /* 육각 출력 형식. 0- 소문자; 1- 대문자 */var b64pad = ""; /* Base-64 패드 문자. "="엄격한 RFC 준수 */var chrsz = 8; /* 입력 문자 당 비트. 8 -ASCII; 16 -UNICODE * // * * 이들은 일반적으로 호출하려는 기능입니다 * 문자열 인수를 취하고 16 진수 또는 BASE -64 인코딩 된 문자열 */function hex_sha1 (s) {return binb2Hex (str2Binb (s), s.length * chrsz);} 함수 b64_sha1 (s) {return {return {s) {return binb2b64 (core_sha1 (s), s.length * chrsz);} 함수 str_sha1 (s) {return binb2str (core_sha1 (str2binb (s), s.length * chrsz));} 함수 hex_hmac_sha1 (key, data) {return binb2hex (core_hex) data);} 함수 b64_hmac_sha1 (키, 데이터) {return binb2b64 (core_hmac_sha1 (key, data));} 함수 str_hmac_sha1 (key, data));} function str_hmac_sha1 (key, data) {return binb2str (key_hm a)); VM이 작동하는지 확인하기위한 간단한 자체 테스트 */function sha1_vm_test () {return hex_sha1 ( "abc") == "a9993E364706816ABA3E25717850C26C9CD0D89D";}/ * * */ * */ */function의 SHA-1을 계산합니다. Core_sha1 (x, len) { / * Append Padding * / x [len >> 5] | = 0x80 << (24 -Len % 32); x [((Len + 64 >> 9) << 4) + 15] = Len; var w = 배열 (80); var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; var e = -1009589776; for (var i = 0; i <x.length; i += 16) {var old = a; var oldb = b; var oldc = c; var old = d; var old = e; for (var j = 0; j <80; j ++) {if (j <16) w [j] = x [i+j]; else w [j] = rol (w [j -3] ^ w [j -8] ^ w [j -14] ^ w [j -16], 1); var t = safe_add (safe_add (rol (a, 5), sha1_ft (j, b, c, d)), safe_add (safe_add (e, w [j]), sha1_kt (j))); e = d; d = c; c = rol (b, 30); b = a; a = t; } a = safe_add (a, olda); b = safe_add (b, oldb); c = safe_add (c, oldc); d = safe_add (d, old); e = safe_add (e, old); } return array (a, b, c, d, e);}/ * * 현재 * 반복 */function sha1_ft (t, b, c, d) {if (t <20) retur (b & c)에 대한 적절한 삼중 항 조합 함수를 수행합니다. ((~ b) & d); if (t <40) 반환 b ^ c ^ d; if (t <60) 반환 (b & c) | (B & D) | (CD); return b ^ c ^ d;}/ * * 현재 반복에 대한 적절한 추가 상수를 결정하십시오 */functionsha1_kt (t) {return (t <20)? 1518500249 : (T <40)? 1859775393 : (t <60)? -1894007588 : -899497514;}/ * * 키의 HMAC -SHA1 계산 및 일부 데이터 */function core_hmac_sha1 (키, 데이터) {var bkey = str2binb (키); if (bkey.length> 16) bkey = core_sha1 (bkey, key.length * chrsz); var iPad = 배열 (16), opad = 배열 (16); for (var i = 0; i <16; i ++) {ipad [i] = bkey [i] ^ 0x36363636; opad [i] = bkey [i] ^ 0x5c5c5c5c; } var hash = core_sha1 (iPad.concat (str2binb (data)), 512 + data.length * chrsz); return core_sha1 (opad.concat (Hash), 512 + 160);}/ * * 정수를 추가하고 2^32로 랩핑합니다. 이는 내부적으로 16 비트 작업을 사용하여 일부 JS 통역사의 버그를 중심으로 작업합니다. */function safe_add (x, y) {var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); 반환 (MSW << 16) | (lsw & 0xffff);}/ * * 비트 타운 32 비트 번호를 왼쪽으로 회전시킵니다. */function rol (num, cnt) {return (num << cnt) | (num >>> (32-cnt));}/ * * 8 비트 또는 16 비트 문자열을 8 비트 함수의 빅 엔디 언어 단어 배열로 변환하면 문자> 255는 하이 바이트가 조용히 무시됩니다. */function str2binb (str) {var bin = array (); var mask = (1 << chrsz) -1; for (var i = 0; i <str.length * chrsz; i += chrsz) bin [i >> 5] | = (str.charcodeat (i / chrsz) & mask) << (24 -i % 32); return bin;}/ * * Big-Endian 단어 배열을 문자열로 변환 */function binb2str (bin) {var str = ""; var mask = (1 << chrsz) -1; for (var i = 0; i <bin.length * 32; i += chrsz) str += string.fromcharcode ((bin [i >> 5] >>> (24 -i % 32)) & 마스크); return str;}/ * * Big-Endian 단어 배열을 16 진 문자열로 변환합니다. */function binb2Hex (binarray) {var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF"; var str = ""; for (var i = 0; i <binarray.length * 4; i ++) {str += hex_tab.charat ((binarray [i >> 2] >> ((3 -i % 4) * 8 +4) & 0xf) +hex_tab.charat ((binarray [i >> 2] >> (3- I % 4))); } return str;}/ * * Big-Endian 단어 배열을 Base-64 String */function binb2b64 (binarray)로 변환합니다. {var tab = "abcdefghijklmnopqrstuvwxyzabcdefghgghijklmnopqrstuvwxyz012346789+/"; var str = ""; for (var i = 0; i <binary.length * 4; i += 3) {var triplet = (((binarray [i >> 2] >> 8 * (3 -i % 4)) & 0xff) << 16) | ((Binarray [i + 1 >> 2] >> 8 * (3- (i + 1) % 4)) & 0xff) << 8) | ((Binarray [i + 2 >> 2] >> 8 * (3- (i + 1) % 4)) & 0xff) << 8) | ((binarray [i + 2 >> 2] >> 8 * (3- (i + 2) % 4)) & 0xff); for (var j = 0; j <4; j ++) {if (i * 8 +j * 6> binary.length * 32) str += b64pad; else str += tab.charat ((트리플렛 >> 6 * (3 -J)) & 0x3f); }} return str;}JavaScript 암호화에 관심이있는 친구들 도이 사이트의 온라인 도구를 참조 할 수도 있습니다 .
MD5 온라인 암호화 도구
탈출 암호화/암호 해독 도구
온라인 SHA1 암호화 도구
Thunder, Express, Tornado URL 암호화/암호 해독 도구
비밀번호 보안 온라인 탐지
고강도 비밀번호 생성기
JavaScript에 대한 자세한 내용은이 사이트의 주제를 확인하십시오. "JavaScript 암호화 및 암호 해독 기술 요약", "JavaScript Switching 특수 효과 및 기술 요약", "JavaScript 검색 알고리즘 기술 요약", "Javascript 특수 효과 및 기술 요약", "Javascript Ordors 및 Debagging Skontor의 요약" 알고리즘 기술 ","JavaScript Traversal 알고리즘 및 기술 요약 "및"JavaScript 수학적 운영 사용 요약 "
이 기사가 모든 사람의 JavaScript 프로그래밍에 도움이되기를 바랍니다.