Este artículo describe el cifrado Base64, el cifrado MD5 y el cifrado SHA1 implementado por JS. Compártelo para su referencia, como sigue:
1. Base64 Cifrado
Introduzca el archivo base64.js en la página, y el método de llamada es:
<! DocType html> <html> <head> <meta charset = "utf-8"> <title> base64 encriptación </title> <script type = "text/javaScript" src = "base64.js"> </script> <script type = "text/javaScript"> var b = new Base64 (); var str = B.encode ("Admin: Admin"); alerta ("Base64 Code:" + Str); // Decrypt Str = B.Decode (Str); alerta ("Base64 Decode:" + Str); </script> </head> <body> </body> </html>2. Cifrado MD5
Consulte el archivo md5.js en la página, y el método de llamada es
<! Doctype html> <html> <adheh> <meta charset = "utf-8"> <title> md5 cifrado </title> <script type = "text/ecmmascript" src = "md5.js"> </script> <script type = "text/javaScript"> var hash = hex_md5 ("123dafd"); alerta (hash) </script> </head> <body> </body> </html>3. Cifrado SHA1
Se dice que este es el cifrado más seguro
La página presenta sha1.js y el método de llamada es
<! Doctype html> <html> <Head> <Meta Charset = "Utf-8"> <title> SHA1 CiCrryption </title> <script type = "text/ecmmascript" src = "sha1.js"> </script> <script type = "text/javaScript"> var sha = hex_sha1 ('mima123465') alerta (sha) </script> </head> <body> </body> </html>Aquí está el código fuente de JS
base64.js:
/**** Base64 ENCODE /DECODE ** @author haitao.tu*@Date 2010-04-26*@email [email protected]**/function base64 () {// Propiedad privada _Keystr = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/="; // Método público para codificar este.Encode = function (input) {var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; entrada = _UTF8_ENCODE (entrada); while (i <input.length) {chr1 = input.charcodeat (i ++); chr2 = input.charCodeat (i ++); chr3 = input.charCodeat (i ++); enc1 = chr1 >> 2; enc2 = ((chr1 y 3) << 4) | (chr2 >> 4); enc3 = ((chr2 y 15) << 2) | (chr3 >> 6); enc4 = chr3 y 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); } salida de retorno; } // Método público para decodificar esto.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 y 15) << 4) | (enc3 >> 2); chr3 = ((enc3 y 3) << 6) | enc4; salida = salida + string.FromCharCode (chr1); if (enc3! = 64) {output = output + string.FromCharCode (chr2); } if (enc4! = 64) {output = output + string.FromCharCode (chr3); }} output = _utf8_decode (salida); salida de retorno; } // Método privado para la codificación 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 += strome.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) y 63) | 128); utftext += string.FromCharCode ((c & 63) | 128); }} return utftext; } // Método privado para la decodificación 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 y 63)); i += 2; } else {c2 = utftext.charcodeat (i+1); c3 = utftext.charcodeat (i+2); String += String.FromCharCode (((C & 15) << 12) | ((C2 y 63) << 6) | (C3 y 63)); i += 3; }} cadena de retorno; }}
MD5.JS:
/ * * Una implementación de JavaScript del RSA Data Security, Inc. Mensaje MD5 * Algoritmo de digestión, como se define en RFC 1321. * Versión 2.1 Copyright (c) Paul Johnston 1999 - 2002. * Otros contribuyentes: Greg Holt, Andrew Kepert, Ydnar, Lostinet * distribuido bajo la licencia BSD * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See * See. http://pajhome.org.uk/crypt/md5 para obtener más información. * // * * Variables configurables. Es posible que deba ajustarlos para que sean compatibles con * el lado del servidor, pero los valores predeterminados funcionan en la mayoría de los casos. */var hexcase = 0; /* Formato de salida hexadecimal. 0 - minúsculas; 1 - upcase */var b64pad = ""; /* Base-64 almohadilla. "=" para el cumplimiento estricto de RFC */var chrsz = 8; /* bits por carácter de entrada. 8 - ASCII; 16 - Unicode * // * * Estas son las funciones que generalmente querrá llamar * Toman argumentos de cadena y devuelven hex o base -64 cadenas codificadas */function hex_md5 (s) {return binl2hex (core_md5 (str2binl (s), s.length * chrsz));} function b64_md5 (s) {returnl binl2b64 (core_md5 (str2binl (s), s.length * chrsz)));} function str_md5 (s) {return binl2str (core_md5 (str2binl (s), s.length * chrsz));} function hEx_hmac_md5 (clave) datos)); } función B64_HMAC_MD5 (clave, datos) {return binl2b64 (core_hmac_md5 (clave, datos)); } función str_hmac_md5 (clave, datos)); } function str_hmac_md5 (clave, data) {return binl2str (core_hmac_md5 (clave, datos)); }/* * Perform a simple self-test to see if the VM is working */function md5_vm_test(){ return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";}/* * Calculate the MD5 of an array of little-endian words, and a bit length */function Core_MD5 (x, len) { / * Append Padding * / X [Len >> 5] | = 0x80 << ((Len) % 32); x [(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -2717333879; var c = -1732584194; var d = 2717333878; for (var i = 0; i <x.length; i += 16) {var Old = a; var Oldb = b; var OldC = C; var viejo = 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); } matriz de retorno (a, b, c, d);}/ * * Estas funciones implementan las cuatro operaciones básicas que usa el algoritmo. */function 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);}function md5_ff(a, b, c, d, x, s, t){ return md5_cmn((b & c) | ((~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 ^ d, b ^ d, b ^ d, b ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c ^ c, b ^ c ^ c ^ c ^ c ^ c ^ C ^ c ^ c ^ c ^ c ^ c ^ C ^ c ^ c ^ c ^ c ^ C ^ C ^ C ^ C ^ C ^ C ^ C ^ C ^ C ^ C ^ D, B ^ D, B ^ C ^ C ^ C ^ C ^ C ^ D, B ^ D, B ^ C ^ C ^ C ^ C ^ C ^ C ^ C. b, x, s, t);} function md5_ii (a, b, c, d, x, s, t) {return md5_cmn (c ^ (b | (~ d)), a, b, x, s, t);}/ * * calcule el hmac-md5, de una tecla y algunos datos */function core_hmac_md5 (key, data) if (bkey.length> 16) bkey = core_md5 (bkey, key.length * chrsz); Hash = Core_MD5 (iPad.concat (str2binl (data)), 512 + data.length * chrsz); y) {var lsw = (x & 0xffff) + (y & 0xfff); >> (32 - CNT));}/ * * Convierta una cadena en una matriz de palabras pequeñas * Si chrsz es ASCII, los caracteres> 255 tienen su HI -byte ignorado silenciosamente bin [i >> 5] | = (str.charcodeat (i/chrsz) & Mask) << (i%32); str += string.FromCharCode ((bin [i >> 5] >>> (i % 32)) y Mask); "0123456789ABCDEF"; ((i%4) * 8)) & 0xf); "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 +/"; << 16) | b64pad;Sha1.js:
/ * * Una implementación de JavaScript del algoritmo de hash seguro, Sha-1, como se define * en FIPS PUB 180-1 * Versión 2.1-beta Copyright Paul Johnston 2000-2002. * Otros contribuyentes: Greg Holt, Andrew Kepert, ydnar, LostInet * distribuido bajo la licencia BSD * ver http://paPAJHOME.orpt detalles. * // * * Variables configurables. Es posible que deba ajustarlos para que sean compatibles con * el lado del servidor, pero los valores predeterminados funcionan en la mayoría de los casos. */var hexcase = 0; /* Formato de salida hexadecimal. 0 - minúsculas; 1 - upcase */var b64pad = ""; /* Base-64 almohadilla. "=" para el cumplimiento estricto de RFC */var chrsz = 8; /* bits por carácter de entrada. 8 - ASCII; 16 - Unicode * // * * Estas son las funciones que generalmente querrá llamar * Toman argumentos de cadena y devuelven hex o base -64 cadenas codificadas */function hex_sha1 (s) {return binb2hex (core_sha1 (str2binb (s), s.length * chrsz));} function B64_SHA1 (s) {retorno binb2b64 (core_sha1 (str2binb (s), s.length * chrsz)));} function str_sha1 (s) {return binb2str (core_sha1 (str2binb (s), s.length * chrsz));} function hEx_hmac_sha1 (key, data) {return binb2hex (core, (core_sha1 (corre_sha1 (KEY, (KEY, CORE, CORE, CORE, CORE, CORE, CORE, CORET. datos));} función 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 (core_ corre_hmac_sha1 (key, data, data,}/}/}/}/}; Selfulte de autoestima simple para ver si el VM está funcionando */function sha1_vm_test () {return hex_sha1 ("abc") == "a9993e364706816aba3e25717850c26c9c9cd0d89d";}/ * * calcula el sha-1 de una arma de las palabras big-endianes, y una longitud de bits, y una longitud de bits, y una longitud de bit */function */function */dent core_sha1 (x, len) { / * Agregar almohadilla * / x [Len >> 5] | = 0x80 << (24 - Len % 32); x [((len + 64 >> 9) << 4) + 15] = len; var w = matriz (80); var a = 1732584193; var b = -2717333879; var c = -1732584194; var d = 2717333878; var e = -1009589776; for (var i = 0; i <x.length; i += 16) {var Old = a; var Oldb = b; var OldC = C; var viejo = d; var viejo = e; para (var j = 0; j <80; j ++) {if (j <16) w [j] = x [i+j]; más 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, viejo); e = safe_add (e, antiguo); } matriz de retorno (a, b, c, d, e);}/ * * Realice la función de combinación de triplete apropiada para la actual * iteración */function 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) | (cd); return b ^ c ^ d;}/ * * Determine la constante adicional apropiada para la iteración actual */function sha1_kt (t) {return (t <20)? 1518500249: (t <40)? 1859775393: (t <60)? -1894007588: -899497514;}/ * * Calcule el HMAC -SHA1 de una clave y algunos datos */function Core_HMAC_SHA1 (Key, Data) {var bkey = str2binb (key); if (bkey.length> 16) bkey = core_sha1 (bkey, key.length * chrsz); var iPad = Array (16), Opad = Array (16); para (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);}/ * * Agregar enteros, envolviendo a 2^32. Esto utiliza operaciones de 16 bits internamente * para trabajar en torno a errores en algunos intérpretes JS. */function safe_add (x, y) {var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (LSW >> 16); Return (MSW << 16) | (LSW y 0xffff);}/ * * Bitwise gire un número de 32 bits a la izquierda. */function rol (num, cnt) {return (num << cnt) | (num >>> (32-CNT));}/ * * Convierta una cadena de 8 bits o 16 bits a una variedad de palabras grandes * en la función de 8 bits, los caracteres> 255 tienen su HI-byte ignorado en silencio. */function str2binb (str) {var bin = array (); Var Mask = (1 << chrsz) - 1; para (var i = 0; i <str.length * chrsz; i += chrsz) bin [i >> 5] | = (str.charcodeat (i / chrsz) & Mask) << (24 - i % 32); return bin;}/ * * Convierta una matriz de palabras endianas a una cadena */function binb2str (bin) {var str = ""; Var Mask = (1 << chrsz) - 1; for (var i = 0; i <bin.length * 32; i += chrsz) str += stromChomCharCode ((bin [i >> 5] >>> (24 - i % 32)) y máscara); return str;}/ * * Convierta una matriz de palabras endianas a una cadena hexadecimal. */function binb2hex (binarray) {var hex_tab = hexcase? "0123456789ABCDEF": "0123456789ABCDEF"; var str = ""; para (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) * 8)) y 0xf); } return str;}/ * * Convierta una matriz de palabras endianas grandes a una cadena base-64 */function binb2b64 (binarArray) {var tab = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz01223456789+/"; "; var str = ""; for (var i = 0; i <binary.length * 4; i += 3) {var triplet = (((binarray [i >> 2] >> 8 * (3 - i % 4)) y 0xff) << 16) | (((binarray [i + 1 >> 2] >> 8 * (3 - (i + 1) % 4)) y 0xff) << 8) | ((binarray [i + 2 >> 2] >> 8 * (3 - (i + 1) % 4)) y 0xff) << 8) | ((binarray [i + 2 >> 2] >> 8 * (3 - (i + 2) % 4)) y 0xff); for (var j = 0; j <4; j ++) {if (i * 8 +j * 6> binary.length * 32) str += b64pad; else str += tab.charat ((triplete >> 6 * (3 - j)) y 0x3f); }} return str;}Los amigos interesados en el cifrado de JavaScript también pueden referirse a las herramientas en línea de este sitio :
Herramienta de cifrado en línea MD5
Herramienta de cifrado/descifrado de escape
Herramienta de cifrado en línea SHA1
Thunder, Express, Herramientas de cifrado/descifrado de URL de tornado
Detección en línea de seguridad de seguridad
Generador de contraseñas de alta resistencia
Para obtener más información sobre JavaScript, consulte los temas de este sitio: "Resumen de las habilidades de cifrado y descifrado de JavaScript", "Resumen de JavaScript Cambio de efectos y habilidades especiales", "Summary of JavaScript Search Algorithm Skills", "Summary of JavaScript Animation Effectes especiales y habilidades", "Summary of JavaScript Errors and Debuggging Habilidades", ", Summary Daturates y Habilidades de animación" y Summary de JaVaScript ", y Summary de JaVaScript Data y Summary de JaVaScript", "Summary y Summary de JaVaScript. Habilidades de algoritmo "," Resumen del algoritmo y habilidades de traversal JavaScript "y" Resumen del uso de la operación matemática de JavaScript "
Espero que este artículo sea útil para la programación de JavaScript de todos.