Artikel ini menjelaskan enkripsi Base64, enkripsi MD5 dan enkripsi SHA1 yang diimplementasikan oleh JS. Bagikan untuk referensi Anda, sebagai berikut:
1. Base64 Enkripsi
Memperkenalkan file base64.js ke halaman, dan metode panggilannya adalah:
<! Doctype html> <html> <head> <meta charset = "utf-8"> <itement> Base64 Encryption </title> <script type = "text/javascript" src = "base64.js"> </script> <script type = "text/javascript"> var b = base64 baru (); var str = b.encode ("admin: admin"); alert ("Base64 Encode:" + str); // dekripsi str = b.decode (str); alert ("base64 decode:" + str); </script> </head> <body> </body> </html>2. Enkripsi MD5
Lihat file MD5.js di halaman, dan metode panggilannya
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>md5 encryption</title><script type="text/ecmascript" src="md5.js"></script><script type="text/javascript"> var hash = hex_md5("123dafd"); alert (hash) </script> </head> <body> </body> </html>3. Enkripsi SHA1
Dikatakan bahwa ini adalah enkripsi teraman
Halaman ini memperkenalkan sha1.js dan metode panggilannya
<! Doctype html> <html> <head> <meta charset = "utf-8"> <itement> SHA1 enkripsi </itement> <script type = "text/ecmascript" src = "sha1.js"> </script> <script = "text/javascript"> var sha = hex_sha1 (script> <script = "text/javascript"> var sha = hex_sha1 (script> <') (Text/Text/JavaScript "> var sha = hex_sha1 (script> <') (script =" Text/JavaScript "> var sha = hex_sha1 (script> (') ALERT (SHA) </Script> </head> <body> </body> </html>Ini kode sumber untuk JS
base64.js:
/**** Base64 Encode /Decode ** @author haitao.tu*@date 2010-04-26*@email [email protected]**/function base64 () {// Properti Pribadi _keystr = "ABCDEFGHIJKLMNOPQRSUVWXYZABCDEFGHIJKLMNOPQRSUVWXYZ0123456789+/="; // Metode publik untuk mengkode this.encode = fungsi (input) {var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = _utf8_encode (input); 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 + _keystr.charat (enc1) + _keystr.charat (enc2) + _keystr.charat (enc3) + _keystr.charat (enc4); } return output; } // Metode publik untuk decoding this.decode = function (input) {var output = ""; var chr1, chr2, chr3; Var ENC1, ENC2, ENC3, ENC4; var i = 0; input = input.replace (/[^a-za-z0-9/+/// =]/g, ""); while (i <input.length) {enc1 = _keystr.indexof (input.charat (i ++)); ENC2 = _KeYstr.IndexOf (input.charat (i ++)); ENC3 = _KeYstr.IndexOf (input.charat (i ++)); ENC4 = _KeYstr.IndexOf (input.charat (i ++)); chr1 = (enc1 << 2) | (ENC2 >> 4); chr2 = ((enc2 & 15) << 4) | (ENC3 >> 2); chr3 = ((enc3 & 3) << 6) | ENC4; output = output + string.fromCharCode (chr1); if (enc3! = 64) {output = output + string.fromCharCode (chr2); } if (enc4! = 64) {output = output + string.fromCharCode (chr3); }} output = _utf8_decode (output); output pengembalian; } // Metode privat untuk pengkodean UTF-8 _UTF8_ENCODE = function (string) {string = string.replace (// r/n/g, "/n"); var utftext = ""; untuk (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; } // Metode privat untuk UTF-8 Decoding _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:
/* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 untuk info lebih lanjut. * // * * Variabel yang dapat dikonfigurasi. Anda mungkin perlu mengubah ini agar kompatibel dengan * sisi server, tetapi defaultnya berfungsi dalam banyak kasus. */var hexcase = 0; /* format output hex. 0 - huruf kecil; 1 - huruf besar */var b64pad = ""; /* BASE-64 PAD karakter. "=" untuk kepatuhan RFC yang ketat */var chrsz = 8; /* bit per karakter input. 8 - ASCII; 16 - Unicode *//* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}function b64_md5(s){ return binl2b64 (core_md5 (str2binl (s), s.length * chrsz));} fungsi str_md5 (s) {return binl2str (core_md5 (str2binl (s), s.length * chrsz));} function hex_hmac_md5 (cey) (data) {{} function hex_hmac_md5 (key, key, data)); data)); } fungsi b64_hmac_md5 (key, data) {return binl2b64 (core_hmac_md5 (key, data)); } fungsi str_hmac_md5 (kunci, data)); } function str_hmac_md5 (key, data) {return binl2str (core_hmac_md5 (key, data)); }/ * * Lakukan uji diri yang sederhana untuk melihat apakah VM berfungsi */fungsi md5_vm_test () {return hex_md5 ("abc") == "900150983CD24FB0D6963F7D28E17F72";}/ * menghitung fungsi md5 dari md5 dari aRIET dari ARROUS dari ARROUT dari ARROUT DAN AREN ARIAN DAN AROUN DAN AROUN DAN AREN ARIAN DAN AROUN DAN AREN ARIAN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROUN DAN AROD DAN AROUN DAN AROD DAN AREAN; 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; untuk (var i = 0; i <x.length; i += 16) {var Old = a; var oldb = b; var oldc = c; var tua = 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);}/ * * Fungsi -fungsi ini mengimplementasikan empat operasi dasar yang digunakan algoritma. */Fungsi md5_cmn (q, a, b, x, s, t) {return safe_add (bit_rol (safe_add (safe_add (safe_add (a, q), safe_add (x, t), s) (b) {{bm) {B) {~ b) {b) {~ b), b), b); & d), a, b, x, s, t);}function md5_gg(a, b, c, d, x, s, t){ return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);}function md5_hh(a, b, c, d, x, s, t){ return md5_cmn(b ^ c ^ d, a, B, x, s, t);} fungsi md5_ii (a, b, c, d, x, s, t) {return md5_cmn (c ^ (b | (~ d)), a, b, x, s, t);}/ * * Hitung hMAC-MD5, dari data dan beberapa data core_hmac/function core_HMAC, dari data KUNCI dan beberapa data */FUNCUE/FUNCUE/FUNCURE. str2binl (key); 0x5c5c5c5c;} var hash = core_md5 (ipad.concat (str2binl (data)), 512 + data.length * chrsz); Penerjemah. Return (cnt) | Chrsz; bin.length * 32; "0123456789ABCDEF": "0123456789ABCDEF"; hex_tab.charat ((binarray [i >> 2] >> ((i%4) * 8)) & 0xf);} return str;}/ * * Konversi array kata-kata kecil-endian menjadi string base-64 */fungsi binl2b64 (binarray) {var var tab = 64 "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 +/"; 0xff) << 16) | str += b64pad; else str += tab.charat ((triplet >> 6*(3-j)) & 0x3f);sha1.js:
/* * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined * in FIPS PUB 180-1 * Version 2.1-BETA Copyright Paul Johnston 2000 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 untuk detailnya. * // * * Variabel yang dapat dikonfigurasi. Anda mungkin perlu mengubah ini agar kompatibel dengan * sisi server, tetapi defaultnya berfungsi dalam banyak kasus. */var hexcase = 0; /* format output hex. 0 - huruf kecil; 1 - huruf besar */var b64pad = ""; /* BASE-64 PAD karakter. "=" untuk kepatuhan RFC yang ketat */var chrsz = 8; /* bit per karakter input. 8 - ASCII; 16 - Unicode *//* * These are the functions you'll usually want to call * They take string arguments and return either hex or base-64 encoded strings */function hex_sha1(s) { return binb2hex(core_sha1(str2binb(s), s.length * chrsz));}function b64_sha1(s) { return binb2b64 (core_sha1 (str2binb (s), s.length * chrsz));} fungsi str_sha1 (s) {return binb2str (core_sha1 (str2binb (s) (s.length * chrsz));} function hex_hmac_sha1 (cey) (data) {{{{hex hex_hmac_sha1 (key, cey, key, cey, key, key, data))); data));} fungsi b64_hmac_sha1 (key, data) {return binb2b64 (core_hmac_sha1 (key, data));} function str_hmac_sha1 (key, data);} function str_hmac_sha1 (key, data) {return binb2str); Tes sendiri sederhana untuk melihat apakah VM berfungsi */fungsi SHA1_VM_TEST () {return hex_sha1 ("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";}/ * fungsi bit-bit-1 dan aRean dari aRe-end dan aRean dari ARRAI-PANAN ARRAID0D89D "; core_sha1 (x, len) { / * append padding * / x [len >> 5] | = 0x80 << (24 - len % 32); x [((len + 64 >> 9) << 4) + 15] = len; var w = array (80); var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; var e = -1009589776; untuk (var i = 0; i <x.length; i += 16) {var Old = a; var oldb = b; var oldc = c; var tua = d; var tua = e; untuk (var j = 0; j <80; j ++) {if (j <16) w [j] = x [i+j]; lain 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, tua); e = safe_add (e, lama); } return array (a, b, c, d, e);}/ * * Lakukan fungsi kombinasi triplet yang sesuai untuk arus * iterasi */fungsi sha1_ft (t, b, c, d) {if (t <20) return (b & c) | ((~ b) & d); if (t <40) return b ^ c ^ d; if (t <60) return (b & c) | (B&D) | (C&D); return b ^ c ^ d;}/ * * Tentukan konstanta tambahan yang sesuai untuk iterasi saat ini */fungsi sha1_kt (t) {return (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;}/ * * Hitung HMAC -SHA1 dari kunci dan beberapa data */fungsi core_hmac_sha1 (kunci, data) {var bkey = str2binb (key); if (bkey.length> 16) bkey = core_sha1 (bkey, key.length * chrsz); var ipad = array (16), opad = array (16); untuk (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);}/ * * Tambahkan bilangan bulat, membungkus 2^32. Ini menggunakan operasi 16-bit secara internal * untuk mengatasi bug di beberapa penerjemah JS. */function safe_add (x, y) {var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); Return (MSW << 16) | (LSW & 0XFFFF);}/ * * Bitwise putar nomor 32-bit ke kiri. */function rol (num, cnt) {return (num << cnt) | (num >>> (32-cnt));}/ * * Konversi string 8-bit atau 16-bit menjadi array kata-kata besar-endian * dalam fungsi 8-bit, karakter> 255 memiliki hi-byte mereka yang diabaikan diam-diam. */fungsi str2binb (str) {var bin = array (); var mask = (1 << chrsz) - 1; untuk (var i = 0; i <str.length * chrsz; i += chrsz) bin [i >> 5] | = (str.charcodeat (i / chrsz) & mask) << (24 - i % 32); return bin;}/ * * Konversi array kata-kata besar-endian menjadi string */fungsi binb2str (bin) {var str = ""; var mask = (1 << chrsz) - 1; untuk (var i = 0; i <bin.length * 32; i += chrsz) str += string.fromCharCode ((bin [i >> 5] >>> (24 - i % 32)) & mask); kembalikan str;}/ * * Konversi array kata-kata besar-endian menjadi string hex. */fungsi binb2hex (binarray) {var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF"; var str = ""; untuk (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]; } return str;}/ * * Konversi array kata-kata besar-endian menjadi string-64 string */function binb2b64 (binarray) {var tab = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrsuvwxyz01237878787878878787878787878787878787878787878789 var str = ""; untuk (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); untuk (var j = 0; j <4; j ++) {if (i * 8 +j * 6> binary.length * 32) str += b64pad; lain str += tab.charat ((triplet >> 6 * (3 - j)) & 0x3f); }} return str;}Teman yang tertarik dengan enkripsi JavaScript juga dapat merujuk pada alat online situs ini :
Alat enkripsi online MD5
Escape Encryption/Decryption Tool
Alat enkripsi sha1 online
Thunder, Express, Tornado URL Enkripsi/Dekripsi Alat
Deteksi Online Keamanan Kata Sandi
Generator Kata Sandi Kekuatan Tinggi
Untuk informasi lebih lanjut tentang JavaScript, silakan lihat topik -topik situs ini: "Ringkasan keterampilan enkripsi dan dekripsi JavaScript", "Ringkasan JavaScript Mengalihkan Efek dan Keterampilan Khusus", "Ringkasan Keterampilan Pencarian JavaScript dan Ringkasan Javascript dan Ringkasan Javascript" Ringkasan Javascript "Ringkasan Javascript" Ringkasan Javascript "Ringkasan Javascript" Ringkasan Javascript "," Ringkasan Javascript "Ringkasan Javascript", "Ringkasan Javascript" Ringkasan JavaScript Keterampilan Algoritma "," Ringkasan Algoritma dan Keterampilan Traversal Javascript "dan" Ringkasan Penggunaan Operasi Matematika JavaScript "
Saya harap artikel ini akan membantu pemrograman JavaScript semua orang.