5. Base64 Алгоритм шифрования и дешифрования с использованием JavaScript в Delphi
Поиск Google: javascript base64 шифрование найдет много кодов шифрования Base64.
var base64encodechars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/"; var base64decodechars = новый массив ( -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); Функция Base64encode (str) { var out, я, Лен; var C1, C2, C3; len = str.length; i = 0; out = ""; while (i <len) { c1 = str.charcodeat (i ++) & 0xff; if (i == len) { out += base64encodechars.charat (c1 >> 2); out += base64encodechars.charat ((C1 & 0x3) << 4); out += "=="; перерыв; } c2 = str.charcodeat (i ++); if (i == len) { out += base64encodechars.charat (c1 >> 2); out += base64encodechars.charat (((C1 & 0x3) << 4) | ((C2 & 0xf0) >> 4)); out += base64encodechars.charat ((c2 & 0xf) << 2); out += "="; перерыв; } c3 = str.charcodeat (i ++); out += base64encodechars.charat (c1 >> 2); out += base64encodechars.charat (((C1 & 0x3) << 4) | ((C2 & 0xf0) >> 4)); out += base64encodechars.charat (((c2 & 0xf) << 2) | ((C3 & 0xc0) >> 6)); out += base64encodechars.charat (c3 и 0x } вернуться; } Функция BASE64Decode (str) { var C1, C2, C3, C4; var i, len, out; len = str.length; i = 0; out = ""; while (i <len) { / * c1 */ делать { c1 = base64decodechars [str.charcodeat (i ++) и 0xff]; } while (i <len && c1 == -1); if (c1 == -1) перерыв; / * c2 */ делать { c2 = base64decodechars [str.charcodeat (i ++) и 0xff]; } while (i <len && c2 == -1); if (c2 == -1) перерыв; out += string.fromCharcode ((C1 << 2) | ((C2 & 0x30) >> 4)); / * c3 */ делать { c3 = str.charcodeat (i ++) & 0xff; if (c3 == 61) вернуться; c3 = base64decodechars [C3]; } while (i <len && c3 == -1); if (c3 == -1) перерыв; out += string.fromCharcode (((C2 & 0xf) << 4) | ((C3 & 0x / * c4 */ делать { c4 = str.charcodeat (i ++) & 0xff; if (c4 == 61) вернуться; c4 = base64decodechars [C4]; } while (i <len && c4 == -1); if (c4 == -1) перерыв; out += string.fromCharcode (((C3 & 0x03) << 6) | C4); } вернуться; } функция utf16to8 (str) { var Out, I, Len, C; out = ""; len = str.length; for (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 } еще { out += string.fromCharcode (0xc0 | ((C >> 6) & 0x out += string.fromCharcode (0x80 | ((C >> 0) & 0x } } вернуться; } функция utf8to16 (str) { var Out, I, Len, C; var char2, char3; out = ""; len = str.length; i = 0; while (i <len) { c = str.charcodeat (i ++); Переключение (C >> 4) { Случай 0: Случай 1: Случай 2: Случай 3: Случай 4: Случай 5: Случай 6: Случай 7: // 0xxxxxxxx out += str.charat (i-1); перерыв; Случай 12: Случай 13: // 110x xxxx 10xx xxxx char2 = str.charcodeat (i ++); out += string.fromChorde (((C & 0x перерыв; Случай 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charcodeat (i ++); char3 = str.charcodeat (i ++); out += string.fromChorde (((C & 0x ((Char2 & 0x ((Char3 & 0x перерыв; } } вернуться; } |
Как мы можем добавить такой длинный кусок кода в метод addCode ()?
1) Первый метод: определить такой длинный код на строку. Эта рабочая нагрузка определенно очень большая и подверженная ошибкам.
2) Второй метод: определите его в блокноте и прочитайте его, когда программа работает. Безопасность очень низкая, и ее легко изменить и привести к ошибкам.
3) Третий метод: хранить его в DLL в качестве файла ресурса. Этот метод более подходит. Мы будем использовать этот метод, чтобы справиться с ним ниже.
Шаги по созданию DLL:
1) Создайте новый блокнот, вставьте приведенный выше код и, наконец, сохраните его как BASE64.TXT.
2) Создайте новый блокнот, напишите следующий код и, наконец, сохраните его в качестве BASE64.RC.
BASE64FILE EXEFILE "BASE64.txt" |
3) Создайте новый пакетный файл в том же каталоге и сохраните его, что и Base64.bat.
BRCC32.exe base64.rc |
4) Скомпилируйте в файл ресурса Res: дважды щелкните, чтобы выполнить BASE64.BAT, а после этого будет сгенерирован файл BASE64.RES, который является файлом ресурса сценария JavaScript.
5) Создайте новый DLL, сохраните его в качестве BASE64.DPR, добавьте следующий код, а затем составьте его в BASE64.DLL.
библиотека база64; {$ R base64.res} Начинать конец. |
Таким образом, наш файл ресурса упакован в DLL, и он завершен!
Затем наша задача - прочитать код JavaScript через DLLS.
{Читать файл ресурса в строковую переменную} Функция readresource (): string; Вар Хинст: Тандл; Поток: tresourcestream; Кодекринг: TStrings; Начинать Результаты: = ''; // загрузка DLL Hinst: = loadlibrary ('base64.dll'); Если hinst = 0, то выйдите; Пытаться // Читать файл ресурса Поток: = tresourcestream.create (hinst, 'base64file', 'exefile'); CODESTRING: = tStringList.Create (); Пытаться // Сохранить файл ресурса в списке Codestring.LoadFromStream (Stream); // вернуть строку Результат: = codestring.text; Окончательно Codestring.free; Stream.free; конец; Окончательно Фрилибрика (Hinst); конец; конец; |
Следующая работа заключается в добавлении пользовательских функций JavaScript через AddCode () управления ScriptControl.
Инициализируйте компонент ScriptControl, пожалуйста, обратитесь к расширенному применению ScriptControl в Delphi (i)
http://blog.csdn.net/juwuyi/archive/
Sc.addcode (readresource ()); // шифрование Слова: = 'Это кусок текста, зашифрованный BASE64'; //Результат: Результат: = sc.Eval ('base64encode (utf16to8 (' '+words+' '')) '); // дешифрование Результат: = sc.Eval ('utf8to16 (base64decode (' '+words+' '')) '); |
<Span style = "font-family: song font; m