5. Base64 Delphi에서 JavaScript를 사용한 암호화 및 암호 해독 알고리즘
Google 검색 : JavaScript Base64 암호화에는 많은 Base64 암호화 코드가 있습니다.
var base644odechars = "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, -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, I, Len; 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 = 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 : 사례 4 : 사례 5 : 사례 6 : 사례 7 : // 0xxxxxxxx out += str.charat (i-1); 부서지다; 사례 12 : 사례 13 : // 110x xxxx 10xx xxxx char2 = str.charcodeat (i ++); out += string.fromcharcode (((C & 0x 부서지다; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charcodeat (i ++); char3 = str.charcodeat (i ++); out += string.fromcharcode (((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) 리소스 파일로 컴파일 : Base64.Bat을 실행하려면 두 번 클릭하면 Base64.Res 파일이 생성되며 이는 JavaScript 스크립트의 리소스 파일입니다.
5) 새 DLL을 만들고 Base64.dpr로 저장하고 다음 코드를 추가 한 다음 Base64.dll로 컴파일합니다.
도서관베이스 64; {$ r base64.res} 시작하다 끝. |
이런 식으로, 우리의 리소스 파일은 dll로 포장되어 완료됩니다!
다음으로, 우리의 임무는 DLL을 통해 JavaScript 코드를 읽는 것입니다.
{문자열 변수로 리소스 파일 읽기} 함수 readResource () : 문자열; var Hinst : Thandle; 스트림 : tresourcestream; 코드 스트링 : tstrings; 시작하다 결과 : = ''; // DLL을로드합니다 Hinst : = loadlibrary ( 'base64.dll'); Hinst = 0이면 종료; 노력하다 // 리소스 파일을 읽습니다 스트림 : = tresourcestream.create (Hinst, 'base64file', 'Exefile'); Codestring : = tstringlist.create (); 노력하다 // 목록에 리소스 파일을 저장합니다 Codestring.loadfromStream (스트림); // 문자열을 반환합니다 결과 : = codestring.text; 마지막으로 Codestring.free; stream.free; 끝; 마지막으로 프리 브리 브리 (Freelibrary) (Hinst); 끝; 끝; |
다음 작업은 스크립트 구성 제어의 addCode ()를 통해 사용자 정의 JavaScript 함수를 추가하는 것입니다.
스크립트 구성 구성 요소 초기화, 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