5. Base64 -Verschlüsselungs- und Entschlüsselungsalgorithmus mit JavaScript in Delphi
Suchen Sie Google: JavaScript Basis64 -Verschlüsselung findet viele Base64 -Verschlüsselungscodes.
var base64encodechars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/"; var Base64Decodechars = Neuarray ( -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, 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, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1); Funktion Base64Encode (str) { var out, ich, len; Var C1, C2, C3; Len = Str.Length; i = 0; out = ""; während (i <len) { C1 = Str.CharCodeat (i ++) & 0xff; if (i == len) { out += base64Enencodechars.charat (c1 >> 2); out += base64Enencodechars.charat ((c1 & 0x3) << 4); out += "=="; brechen; } c2 = str.charCodeat (i ++); if (i == len) { out += base64Enencodechars.charat (c1 >> 2); out += base64Enencodechars.charat (((c1 & 0x3) << 4) | ((C2 & 0xf0) >> 4)); out += base64Enencodechars.charat ((C2 & 0xf) << 2); out += "="; brechen; } c3 = str.charCodeat (i ++); out += base64Enencodechars.charat (c1 >> 2); out += base64Enencodechars.charat (((c1 & 0x3) << 4) | ((C2 & 0xf0) >> 4)); out += base64Enencodechars.charat (((c2 & 0xf) << 2) | ((C3 & 0xc0) >> 6)); out += base64encodechars.charat (C3 & 0x } zurückkehren; } Funktion Base64Decode (str) { Var C1, C2, C3, C4; var i, len, out; Len = Str.Length; i = 0; out = ""; während (i <len) { / * c1 */ Tun { C1 = Base64Decodechars [str.charCodeat (i ++) & 0xff]; } while (i <len && c1 == -1); if (c1 == -1) brechen; / * c2 */ Tun { C2 = Base64Decodechars [str.charCodeat (i ++) & 0xff]; } while (i <len && c2 == -1); if (c2 == -1) brechen; out += string.fromCharCode ((c1 << 2) | ((C2 & 0x30) >> 4)); / * c3 */ Tun { C3 = Str.CharCodeat (i ++) & 0xff; if (c3 == 61) zurückkehren; C3 = Base64Decodechars [C3]; } while (i <len && c3 == -1); if (c3 == -1) brechen; out += string.fromCharCode (((C2 & 0xf) << 4) | ((C3 & 0x) / * c4 */ Tun { c4 = str.charCodeat (i ++) & 0xff; if (c4 == 61) zurückkehren; C4 = Base64Decodechars [C4]; } while (i <len && c4 == -1); if (c4 == -1) brechen; out += string.fromCharCode (((C3 & 0x03) << 6) | C4); } zurückkehren; } Funktion utf16to8 (str) { var out, i, len, c; out = ""; Len = Str.Length; für (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) & 0x out += string.fromCharCode (0x80 | ((c >> 6) & 0x out += string.fromCharCode (0x80 | ((c >> 0) & 0x } anders { out += string.fromCharCode (0xc0 | ((c >> 6) & 0x out += string.fromCharCode (0x80 | ((c >> 0) & 0x } } zurückkehren; } Funktion utf8to16 (str) { var out, i, len, c; var char2, char3; out = ""; Len = Str.Length; i = 0; während (i <len) { c = str.charCodeat (i ++); Schalter (c >> 4) { Fall 0: Fall 1: Fall 2: Fall 3: Fall 4: Fall 5: Fall 6: Fall 7: // 0xxxxxxxx out += str.charat (i-1); brechen; Fall 12: Fall 13: // 110x xxxx 10xx xxxx char2 = str.charCodeat (i ++); out += string.fromcharcode (((c & 0x brechen; Fall 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charCodeat (i ++); char3 = str.charCodeat (i ++); out += string.fromcharcode (((c & 0x ((char2 & 0x ((char3 & 0x brechen; } } zurückkehren; } |
Wie können wir in der Methode von addCode () ein so langes Code -Stück hinzufügen?
1) Die erste Methode: Definieren Sie einen so langen Code in einer Zeichenfolge. Diese Arbeitsbelastung ist definitiv sehr groß und fehleranfällig.
2) Die zweite Methode: Definieren Sie sie in einem Notizblock und lesen Sie sie in dem Programm. Die Sicherheit ist sehr niedrig und es ist einfach, modifiziert zu werden und zu Fehlern zu führen.
3) Die dritte Methode: Speichern Sie sie in einer DLL als Ressourcendatei. Diese Methode ist besser geeignet. Wir werden diese Methode verwenden, um sie unten zu bewältigen.
Schritte zur Erzeugung einer DLL:
1) Erstellen Sie einen neuen Notizblock, fügen Sie den obigen Code ein und speichern Sie ihn schließlich als Base64.TXT.
2) Erstellen Sie einen neuen Notizblock, schreiben Sie den folgenden Code und speichern Sie ihn schließlich als Base64.RC.
Base64File Exefile "Base64.txt" |
3) Erstellen Sie eine neue Batch -Datei im selben Verzeichnis und speichern Sie sie als Base64.BAT.
BRCC32.exe Base64.rc |
4) Kompilieren Sie in eine Ressourcendatei.
5) Erstellen Sie eine neue DLL, speichern Sie sie als Base64.dpr, fügen Sie den folgenden Code hinzu und kompilieren Sie sie dann in Base64.dll.
Bibliotheksbasis64; {$ R Basis64.res} Beginnen Ende. |
Auf diese Weise ist unsere Ressourcendatei in eine DLL verpackt und ist abgeschlossen!
Als nächstes ist es unsere Aufgabe, JavaScript Code über DLLs zu lesen.
{Lesen Sie die Ressourcendatei in eine Zeichenfolgenvariable} Funktion ReadResource (): String; Var Hinst: Thandle; Stream: Tresourcestream; Codestring: TStrings; Beginnen Ergebnisse: = ''; // DLL laden Hinst: = loadlibrary ('Base64.dll'); Wenn hinst = 0 dann beenden; Versuchen // Ressourcendatei lesen Stream: = Tresourcestream.create (Hinst, 'Base64File', 'Exefile'); Codestring: = tstringlist.create (); Versuchen // Speichern Sie die Ressourcendatei in der Liste Codestring.loadfromstream (stream); // eine Zeichenfolge zurückgeben Ergebnis: = codestring.text; Endlich Codestring.free; Stream.free; Ende; Endlich Freiberufler (Hinst); Ende; Ende; |
Im Folgenden werden benutzerdefinierte JavaScript -Funktionen über addCode () der Skriptcontrol -Steuerung hinzugefügt.
Initialisieren Sie die SkriptControl -Komponente. Weitere Informationen finden Sie in der erweiterten Anwendung von SkriptControl in Delphi (i).
http://blog.csdn.net/juwuyi/archive/
Sc.addcode (ReadResource ()); // Verschlüsselung Wörter: = 'Dies ist ein mit Basis 64' verschlüsselter Text. //Ergebnis: Ergebnis: = sc.eval ('Base64Encode (utf16to8 (' '+Words+' '))'); // Entschlüsselung Ergebnis: = sc.eval ('utf8to16 (Base64Decode (' '+Words+' '))'); |
<Span style = "Schriftfamilie: Song Schrift; M.