5. Algoritmo de cifrado y descifrado de Base64 usando JavaScript en Delphi
Buscando Google: JavaScript Base64 Cifryction encontrará muchos códigos de cifrado Base64.
var Base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"; var base64Decodechars = nueva matriz ( -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1); función base64Encode (str) { Var OUT, I, Len; var c1, c2, c3; len = str.length; i = 0; out = ""; while (i <len) { c1 = str.charcodeat (i ++) y 0xff; if (i == len) { out += base64EncodeChars.Charat (C1 >> 2); out += base64EncodeChars.Charat ((C1 y 0x3) << 4); out += "=="; romper; } c2 = str.charcodeat (i ++); if (i == len) { out += base64EncodeChars.Charat (C1 >> 2); out += base64EncodeChars.Charat ((((C1 y 0x3) << 4) | ((C2 y 0xf0) >> 4)); out += base64EncodeChars.Charat ((C2 y 0xf) << 2); out += "="; romper; } c3 = str.charcodeat (i ++); out += base64EncodeChars.Charat (C1 >> 2); out += base64EncodeChars.Charat ((((C1 y 0x3) << 4) | ((C2 y 0xf0) >> 4)); out += base64EncodeChars.Charat ((((C2 y 0xf) << 2) | ((C3 y 0xc0) >> 6)); out += base64CodeChars.Charat (C3 y 0x } regresar; } función base64Decode (str) { var c1, c2, c3, c4; var i, len, fuera; len = str.length; i = 0; out = ""; while (i <len) { / * C1 */ hacer { C1 = base64DecodeChars [str.charcodeat (i ++) y 0xff]; } while (i <len && c1 == -1); if (c1 == -1) romper; / * C2 */ hacer { C2 = base64DecodeChars [str.charcodeat (i ++) & 0xff]; } while (i <len && c2 == -1); if (c2 == -1) romper; out += string.FromCharCode ((C1 << 2) | ((C2 y 0x30) >> 4)); / * C3 */ hacer { c3 = str.charcodeat (i ++) y 0xff; if (c3 == 61) regresar; C3 = base64DecodeChars [C3]; } while (i <len && c3 == -1); if (c3 == -1) romper; out += String.FromCharCode ((((C2 y 0xf) << 4) | ((C3 & 0x / * C4 */ hacer { C4 = str.charcodeat (i ++) y 0xff; if (c4 == 61) regresar; C4 = base64DecodeChars [C4]; } while (i <len && c4 == -1); if (c4 == -1) romper; out += String.FromCharCode ((((C3 y 0x03) << 6) | C4); } regresar; } función UTF16TO8 (str) { Var OUT, I, Len, C; out = ""; len = str.length; para (i = 0; i <len; i ++) { c = str.charcodeat (i); if ((c> = 0x0001) && (c <= 0x out += str.charat (i); } else if (c> 0x07ff) { out += string.fromcharcode (0xe0 | ((c >> 12) y 0x out += string.fromcharcode (0x80 | ((c >> 6) y 0x out += string.fromcharcode (0x80 | ((c >> 0) y 0x } demás { out += string.fromcharcode (0xc0 | ((c >> 6) y 0x out += string.fromcharcode (0x80 | ((c >> 0) y 0x } } regresar; } función utf8to16 (str) { Var OUT, I, Len, C; var char2, char3; out = ""; len = str.length; i = 0; while (i <len) { c = str.charcodeat (i ++); interruptor (c >> 4) { Caso 0: Caso 1: Caso 2: Caso 3: Caso 4: Caso 5: Caso 6: Caso 7: // 0xxxxxxxx out += str.charat (i-1); romper; Caso 12: Caso 13: // 110x xxxx 10xx xxxx char2 = str.charcodeat (i ++); out += string.fromcharcode (((c & 0x romper; Caso 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charcodeat (i ++); char3 = str.charcodeat (i ++); out += string.fromcharcode (((c & 0x ((char2 y 0x ((char3 y 0x romper; } } regresar; } |
¿Cómo podemos agregar un código tan largo en el método de addcode ()?
1) El primer método: defina un código tan largo a una cadena. Esta carga de trabajo es definitivamente muy grande y propensa a errores.
2) El segundo método: definirlo en un bloc de notas y leerlo cuando el programa se esté ejecutando. La seguridad es muy baja y es fácil ser modificada y conducir a errores.
3) El tercer método: guárdelo en un DLL como un archivo de recursos. Este método es más adecuado. Usaremos este método para tratarlo a continuación.
Pasos para generar una DLL:
1) Cree un nuevo bloc de notas, pegue el código anterior y finalmente guárdelo como base64.txt.
2) Cree un nuevo bloc de notas, escriba el siguiente código y finalmente guárdelo como base64.rc.
Base64File exefile "Base64.txt" |
3) Cree un nuevo archivo por lotes en el mismo directorio y guárdelo como base64.bat.
BRCC32.EXE BASE64.RC |
4) Compilar en el archivo de recursos RES: Haga doble clic para ejecutar Base64.bat, y después de eso, se generará un archivo Base64.Res, que es el archivo de recursos del script JavaScript.
5) Cree una nueva DLL, guárdela como base64.DPR, agregue el siguiente código y luego compile en Base64.dll.
Biblioteca Base64; {$ R base64.res} Comenzar fin. |
De esta manera, nuestro archivo de recursos está empaquetado en una DLL y se completa.
A continuación, nuestro trabajo es leer el código JavaScript a través de DLLS.
{Lea el archivo de recursos en una variable de cadena} Función readResource (): string; Varilla Hinst: Thandle; Stream: TresourCstream; CodeString: tstrings; Comenzar Resultados: = ''; // cargar dll Hinst: = LoadLibrary ('base64.dll'); Si hinst = 0 entonces salga; Intentar // Leer archivo de recursos Stream: = TresourCestream.Create (Hinst, 'Base64File', 'ExeFile'); CodeString: = tStringList.Create (); Intentar // Guardar el archivo de recursos en la lista CodeString.LoadFromStream (Stream); // Devuelve una cadena Resultado: = CodeString.Text; Finalmente Codestring.Free; Transmisión sin; fin; Finalmente Freelibrary (hinst); fin; fin; |
El siguiente trabajo es agregar funciones de JavaScript personalizadas a través de addCode () del control scriptControl.
Inicializar el componente de scriptControl, consulte la aplicación avanzada de scriptControl en Delphi (i)
http://blog.csdn.net/juwuyi/archive/
Sc.addcode (readResource ()); // cifrado Palabras: = 'Este es una pieza de texto encriptada con base64'; //Resultado: Resultado: = sc.eval ('base64Encode (utf16to8 (' '+palabras+' '')) '); // descifrado Resultado: = sc.eval ('utf8to16 (base64Decode (' '+palabras+' '')) '); |
<Span style = "Font-Family: Song Font; M