5. Algoritmo de criptografia e descriptografia base64 usando JavaScript em Delphi
Pesquisando Google: a criptografia Javascript Base64 encontrará muitos códigos de criptografia BASE64.
var Base64Encodars = "abcdefghijklmnopqrStUvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/"; var Base64DecodeChars = nova 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, 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); função base64Encode (str) { var out, i, len; var c1, c2, c3; len = str.length; i = 0; out = ""; enquanto (i <len) { c1 = str.charcodeat (i ++) e 0xff; if (i == len) { out += base64encodars.charat (c1 >> 2); out += base64encodars.charat ((c1 e 0x3) << 4); out += "=="; quebrar; } c2 = str.charcodeat (i ++); if (i == len) { out += base64encodars.charat (c1 >> 2); out += base64encodars.charat (((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)); out += base64encodars.charat ((c2 e 0xf) << 2); out += "="; quebrar; } c3 = str.charcodeat (i ++); out += base64encodars.charat (c1 >> 2); out += base64encodars.charat (((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)); out += base64encodars.charat (((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6)); out += base64encodars.charat (C3 & 0x } retornar; } função base64Decode (str) { var C1, C2, C3, C4; var i, Len, Out; len = str.length; i = 0; out = ""; enquanto (i <len) { / * C1 */ fazer { C1 = base64DecodeChars [str.charcodeat (i ++) e 0xff]; } while (i <len && c1 == -1); if (c1 == -1) quebrar; / * c2 */ fazer { C2 = base64DecodeChars [str.charcodeat (i ++) e 0xff]; } while (i <len && c2 == -1); if (c2 == -1) quebrar; out += string.fromCharcode ((c1 << 2) | ((c2 & 0x30) >> 4)); / * C3 */ fazer { c3 = str.charcodeat (i ++) e 0xff; if (c3 == 61) retornar; C3 = base64Decodechars [C3]; } while (i <len && c3 == -1); if (c3 == -1) quebrar; out += string.fromCharcode (((c2 e 0xf) << 4) | ((C3 & 0x / * C4 */ fazer { c4 = str.charcodeat (i ++) e 0xff; if (c4 == 61) retornar; C4 = base64Decodechars [C4]; } while (i <len && c4 == -1); if (c4 == -1) quebrar; out += string.FromCharCode (((C3 & 0x03) << 6) | C4); } retornar; } função 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) e 0x out += string.FromCharCode (0x80 | ((c >> 6) e 0x out += string.FromCharCode (0x80 | ((c >> 0) & 0x } outro { out += string.fromCharcode (0xc0 | ((c >> 6) e 0x out += string.FromCharCode (0x80 | ((c >> 0) & 0x } } retornar; } função utf8to16 (str) { var out, i, len, c; var char2, char3; out = ""; len = str.length; i = 0; enquanto (i <len) { c = str.charcodeat (i ++); Switch (c >> 4) { Caso 0: Caso 1: Caso 2: Caso 3: Caso 4: Caso 5: Caso 6: Caso 7: // 0xxxxxxxx out += str.Charat (i-1); quebrar; Caso 12: Caso 13: // 110x xxxx 10xx xxxx char2 = str.charcodeat (i ++); out += string.fromCharcode (((c & 0x quebrar; Caso 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charcodeat (i ++); char3 = str.charcodeat (i ++); out += string.fromCharcode (((c & 0x ((char2 e 0x ((char3 e 0x quebrar; } } retornar; } |
Como podemos adicionar um código tão longo no método de addCode ()?
1) O primeiro método: defina um código tão longo em uma string. Esta carga de trabalho é definitivamente muito grande e propensa a erros.
2) O segundo método: defina -o em um bloco de notas e leia -o quando o programa estiver em execução. A segurança é muito baixa e é fácil ser modificada e levar a erros.
3) O terceiro método: armazene -o em uma DLL como um arquivo de recurso. Este método é mais adequado. Usaremos esse método para lidar com ele abaixo.
Etapas para gerar uma DLL:
1) Crie um novo bloco de notas, cole o código acima e, finalmente, salve -o como base64.txt.
2) Crie um novo bloco de notas, escreva o código a seguir e, finalmente, salve -o como base64.rc.
Base64 File Exefile "Base64.txt" |
3) Crie um novo arquivo em lote no mesmo diretório e salve -o como base64.bat.
BRCC32.EXE BASE64.RC |
4) Compilar no arquivo de recursos res: clique duas vezes para executar base64.bat e, depois disso, um arquivo base64.res será gerado, que é o arquivo de recursos do script JavaScript.
5) Crie uma nova DLL, salve -a como base64.dpr, adicione o código a seguir e compile -o em base64.dll.
biblioteca base64; {$ R base64.res} Começar fim. |
Dessa forma, nosso arquivo de recursos é empacotado em uma DLL e é concluído!
Em seguida, nosso trabalho é ler o código JavaScript através do DLLS.
{Leia o arquivo de recurso para uma variável string} Função readResource (): string; Var Hinst: Thandle; Stream: TresourceStream; Codestring: TStrings; Começar Resultados: = ''; // Carregar dll Hinst: = loadlibrary ('base64.dll'); Se hinst = 0, então saia; Tentar // Leia o arquivo de recursos Stream: = TresourceStream.create (hinst, 'base64File', 'Exfile'); Codestring: = tStringList.create (); Tentar // salve o arquivo de recursos na lista Codestring.loadFromStream (Stream); // retorna uma string Resultado: = codestring.text; Finalmente Codestring.Free; Stream.free; fim; Finalmente Freelibrary (Hinst); fim; fim; |
O trabalho a seguir é adicionar funções JavaScript personalizadas através do addCode () do controle ScriptControl.
Inicialize o componente ScriptControl, consulte a aplicação avançada do ScriptControl em Delphi (i)
http://blog.csdn.net/juwuyi/archive/
Sc.addcode (readResource ()); // criptografia Palavras: = 'Este é um pedaço de texto criptografado com base64'; //Resultado: Resultado: = sc.eval ('base64encode (utf16to8 (' '+palavras+' '')) '); // Decripção Resultado: = sc.eval ('utf8to16 (base64Decode (' '' Words+'' '')) '); |
<Span style = "font-family: song font; m