Q&A

  • jsp로 만들어진 암호화모듈 걸기...
언제나 도움만 받고 있는 초보개발자입니다.
델파이6과 오라클806을 이용하여 개발 하는 건이 있는데
post방식으로 특정사이트에 데이터를 전송할때 jsp로 만들어진
암호화 모듈을 걸어야 합니다.
이것이 말은 쉬운거 같은데 영 감이 안잡혀 이렇게
고수님들에게 도움을 청합니다.
업체에선 오픈날자를 월요일로 잡고 있는데
뾰족한 답은 없고...ㅠ.ㅠ
한수 부탁드립니다.
감사합니다.
4  COMMENTS
  • Profile
    김건림 2003.01.05 03:04
  • Profile
    벤지 2003.01.06 05:58
    이건 제가 만든것이 아니구요오
    외국의 어느분께서 만든신거 2개올림니다.
    사이트 주소를 잊어먹어서어...

    (1) Base64 (MIME) Encode and Decode
    ===========================================================

    unit uBase64Codec;

    interface

    function CalcEncoderSize(InSize: Cardinal): Cardinal;
    function CalcDecoderSize(const InBuffer; InSize: Cardinal): Cardinal;

    procedure Base64Encode(const InBuffer; InSize: Cardinal; var OutBuffer); overload; register;
    procedure Base64Decode(const InBuffer; InSize: Cardinal; var OutBuffer); overload; register;

    procedure Base64Encode(const InText: PAnsiChar; var OutText: PAnsiChar); overload;
    procedure Base64Encode(const InText: AnsiString; var OutText: AnsiString); overload;

    procedure Base64Decode(const InText: PAnsiChar; var OutText: PAnsiChar); overload;
    procedure Base64Decode(const InText: AnsiString; var OutText: AnsiString); overload;

    implementation

    uses
      SysUtils;

    function CalcEncoderSize(InSize: Cardinal): Cardinal;
    begin
      // no buffers passed along, calculate outbuffer size needed
      Result := (InSize div 3) shl 2;
      if InSize mod 3 > 0 then
        Inc(Result, 4);
    end;

    function CalcDecoderSize(const InBuffer; InSize: Cardinal): Cardinal;
    type
      BA = array of Byte;
    begin
      Result := 0;
      if InSize = 0 then
        Exit;
      if InSize mod 4 <> 0 then
        Exit;
      Result := InSize div 4 * 3;
      if BA(InBuffer)[InSize - 2] = Ord('=') then
        Dec(Result, 2)
      else if BA(InBuffer)[InSize - 1] = Ord('=') then
        Dec(Result);
    end;

    procedure Base64Encode(
      const InBuffer; InSize: Cardinal; var OutBuffer
    ); register;
    const
      cBase64Codec: array[0..63] of AnsiChar =
        'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    var
      ByThrees, LeftOver: Cardinal;
      // reset in- and outbytes positions
    asm
      // load addresses for source and destination
      // PBYTE(InBuffer);
      mov  ESI, [EAX]
      // PBYTE(OutBuffer);
      mov  EDI, [ECX]
      // ByThrees := InSize div 3;
      // LeftOver := InSize mod 3;
      // load InSize (stored in EBX)
      mov  EAX, EBX
      // load 3
      mov  ECX, $03
      // clear upper 32 bits
      xor  EDX, EDX
      // divide by ECX
      div  ECX
      // save result
      mov  ByThrees, EAX
      // save remainder
      mov  LeftOver, EDX
      // load addresses
      lea  ECX, cBase64Codec[0]
      // while I < ByThrees do
      // begin
      xor  EAX, EAX
      xor  EBX, EBX
      xor  EDX, EDX
      cmp  ByThrees, 0
      jz   @@LeftOver
      @@LoopStart:
        // load the first two bytes of the source triplet
        LODSW
        // write Bits 0..5 to destination
        mov  BL, AL
        shr  BL, 2
        mov  DL, BYTE PTR [ECX + EBX]
        // save the Bits 12..15 for later use [1]
        mov  BH, AH
        and  BH, $0F
        // save Bits 6..11
        rol  AX, 4
        and  AX, $3F
        mov  DH, BYTE PTR [ECX + EAX]
        mov  AX, DX
        // store the first two bytes of the destination quadruple
        STOSW
        // laod last byte (Bits 16..23) of the source triplet
        LODSB
        // extend bits 12..15 [1] with Bits 16..17 and save them
        mov  BL, AL
        shr  BX, 6
        mov  DL, BYTE PTR [ECX + EBX]
        // save bits 18..23
        and  AL, $3F
        xor  AH, AH
        mov  DH, BYTE PTR [ECX + EAX]
        mov  AX, DX
        // store the last two bytes of the destination quadruple
        STOSW
        dec  ByThrees
      jnz  @@LoopStart
      @@LeftOver:
      // there are up to two more bytes to encode
      cmp  LeftOver, 0
      jz   @@Done
      // clear result
      xor  EAX, EAX
      xor  EBX, EBX
      xor  EDX, EDX
      // get left over 1
      LODSB
      // load the first six bits
      shl  AX, 6
      mov  BL, AH
      // save them
      mov  DL, BYTE PTR [ECX + EBX]
      // another byte ?
      dec  LeftOver
      jz   @@SaveOne
      // save remaining two bits
      shl  AX, 2
      and  AH, $03
      // get left over 2
      LODSB
      // load next 4 bits
      shl  AX, 4
      mov  BL, AH
      // save all 6 bits
      mov  DH, BYTE PTR [ECX + EBX]
      shl  EDX, 16
      // save last 4 bits
      shr  AL, 2
      mov  BL, AL
      // save them
      mov  DL, BYTE PTR [ECX + EBX]
      // load base 64 'no more data flag'
      mov  DH, '='
      jmp  @@WriteLast4

      @@SaveOne:
      // adjust the last two bits
      shr  AL, 2
      mov  BL, AL
      // save them
      mov  DH, BYTE PTR [ECX + EBX]
      shl  EDX, 16
      // load base 64 'no more data flags'
      mov  DH, '='
      mov  DL, '='
      // ignore jump, as jump reference is next line !
      // jmp  @@WriteLast4

      @@WriteLast4:
        // load and adjust result
        mov  EAX, EDX
        ror EAX, 16
        // save it to destination
        STOSD
      @@Done:
    end;

    procedure Base64Decode(
      const InBuffer; InSize: Cardinal; var OutBuffer
    ); register;
    const
      cBase64Codec: array[0..127] of Byte =
      (
       $FF, $FF, $FF, $FF, $FF, {005>} $FF, $FF, $FF, $FF, $FF, // 000..009
       $FF, $FF, $FF, $FF, $FF, {015>} $FF, $FF, $FF, $FF, $FF, // 010..019
       $FF, $FF, $FF, $FF, $FF, {025>} $FF, $FF, $FF, $FF, $FF, // 020..029
       $FF, $FF, $FF, $FF, $FF, {035>} $FF, $FF, $FF, $FF, $FF, // 030..039
       $FF, $FF, $FF, $3E, $FF, {045>} $FF, $FF, $3F, $34, $35, // 040..049
       $36, $37, $38, $39, $3A, {055>} $3B, $3C, $3D, $FF, $FF, // 050..059
       $FF, $FF, $FF, $FF, $FF, {065>} $00, $01, $02, $03, $04, // 060..069
       $05, $06, $07, $08, $09, {075>} $0A, $0B, $0C, $0D, $0E, // 070..079
       $0F, $10, $11, $12, $13, {085>} $14, $15, $16, $17, $18, // 080..089
       $19, $FF, $FF, $FF, $FF, {095>} $FF, $FF, $1A, $1B, $1C, // 090..099
       $1D, $1E, $1F, $20, $21, {105>} $22, $23, $24, $25, $26, // 100..109
       $27, $28, $29, $2A, $2B, {115>} $2C, $2D, $2E, $2F, $30, // 110..119
       $31, $32, $33, $FF, $FF, {125>} $FF, $FF, $FF            // 120..127
      );
    asm
      mov  ESI, [EAX]
      mov  EDI, [ECX]

      mov  EAX, InSize
      shr  EAX, 2
      jz   @@Done

      lea  ECX, cBase64Codec[0]
      xor  EBX, EBX

      dec  EAX
      jz   @@LeftOver
      push EBP
      mov  EBP, EAX

      @@LoopStart:
        // load four bytes into EAX
        LODSD
        // save them to ECX as AX is used to store results
        mov  EDX, EAX
        // get bits 0..5
        mov  BL, DL
        // decode
        mov  AH, BYTE PTR [ECX + EBX]
        // get bits 6..11
        mov  BL, DH
        // decode
        mov  AL, BYTE PTR [ECX + EBX]
        // align last 6 bits
        shl  AL, 2
        // get first 8 bits
        ror  AX, 6
        // store first byte
        STOSB
        // align remaining 4 bits
        shr  AX, 12
        // get next two bytes from source quad
        shr  EDX, 16
        // load bits 12..17
        mov  BL, DL
        // decode
        mov  AH, BYTE PTR [ECX + EBX]
        // align ...
        shl  AH, 2
        // ... and adjust
        rol  AX, 4
        // get last bits 18..23
        mov  BL, DH
        // decord
        mov  BL, BYTE PTR [ECX + EBX]
        // enter in destination word
        or   AH, BL
        // and store to destination
        STOSW
        // more coming ?
        dec  EBP
      jnz  @@LoopStart
      pop  EBP
      // no
      // last four bytes are handled separately, as special checking is needed
      // on the last two bytes (may be end of data signals '=' or '==')
      @@LeftOver:
      // get the last four bytes
      LODSD
      // save them to ECX as AX is used to store results
      mov  EDX, EAX
      // get bits 0..5
      mov  BL, DL
      // decode
      mov  AH, BYTE PTR [ECX + EBX]
      // get bits 6..11
      mov  BL, DH
      // decode
      mov  AL, BYTE PTR [ECX + EBX]
      // align last 6 bits
      shl  AL, 2
      // get first 8 bits
      ror  AX, 6
      // store first byte
      STOSB
      // get next two bytes from source quad
      shr  EDX, 16
      // check DL for "end of data signal"
      cmp  DL, '='
      jz   @@Done
      // align remaining 4 bits
      shr  AX, 12
      // load bits 12..17
      mov  BL, DL
      // decode
      mov  AH, BYTE PTR [ECX + EBX]
      // align ...
      shl  AH, 2
      // ... and adjust
      rol  AX, 4
      // store second byte
      STOSB
      // check DH for "end of data signal"
      cmp  DH, '='
      jz   @@Done
      // get last bits 18..23
      mov  BL, DH
      // decord
      mov  BL, BYTE PTR [ECX + EBX]
      // enter in destination word
      or   AH, BL
      // AH - AL for saving last byte
      mov  AL, AH
      // store third byte
      STOSB
      @@Done:
    end;

    procedure Base64Encode(const InText: PAnsiChar; var OutText: PAnsiChar);
    var
      InSize, OutSize: Cardinal;
    begin
      // get size of source
      InSize := Length(InText);
      // calculate size for destination
      OutSize := CalcEncoderSize(InSize);
      // reserve memory
      OutText := StrAlloc(Succ(OutSize));
      OutText[OutSize] := #0;
      // encode !
      Base64Encode(InText, InSize, OutText);
    end;

    procedure Base64Encode(const InText: AnsiString; var OutText: AnsiString); overload;
    var
      InSize, OutSize: Cardinal;
      PIn, POut: Pointer;
    begin
      // get size of source
      InSize := Length(InText);
      // calculate size for destination
      OutSize := CalcEncoderSize(InSize);
      // prepare string length to fit result data
      SetLength(OutText, OutSize);
      PIn := @InText[1];
      POut := @OutText[1];
      // encode !
      Base64Encode(PIn, InSize, POut);
    end;

    procedure Base64Decode(const InText: PAnsiChar; var OutText: PAnsiChar); overload;
    var
      InSize, OutSize: Cardinal;
    begin
      // get size of source
      InSize := Length(InText);
      // calculate size for destination
      OutSize := CalcDecoderSize(InText, InSize);
      // reserve memory
      OutText := StrAlloc(Succ(OutSize));
      OutText[OutSize] := #0;
      // encode !
      Base64Encode(InText, InSize, OutText);
    end;

    procedure Base64Decode(const InText: AnsiString; var OutText: AnsiString); overload;
    var
      InSize, OutSize: Cardinal;
      PIn, POut: Pointer;
    begin
      // get size of source
      InSize := Length(InText);
      // calculate size for destination
      PIn := @InText[1];
      OutSize := CalcDecoderSize(PIn, InSize);
      // prepare string length to fit result data
      SetLength(OutText, OutSize);
      POut := @OutText[1];
      // encode !
      Base64Decode(PIn, InSize, POut);
    end;

    end.

    ===========================================================

    (2) Base64 coding (RFC 1521) 입니다.

    UNIT base64;

    {
       Copyright (c) 1996 Hendrik T. Voelker

       Base64-Kodierung nach RFC 1521
    }

    INTERFACE { ************************************************************** }

       TYPE
         tripel_at          = ARRAY [1..3] OF
                                Byte;

         quadrupel_at       = ARRAY [1..4] OF
                                Byte;

       FUNCTION codeb64
               ( cnt        : Byte;
                 t          : tripel_at )
               : STRING;

       PROCEDURE decodeb64
                (     strg  : STRING;
                  VAR cnt   : Byte;
                  VAR t     : tripel_at );

    IMPLEMENTATION { ********************************************************* }

       CONST
         padd               = 64;

         code64             : STRING[65]
                                = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
                                  'abcdefghijklmnopqrstuvwxyz' +
                                  '0123456789+/=';

       FUNCTION codeb64;

         VAR        { *codeb64* }
           q                : quadrupel_at;
           strg             : STRING;
           idx              : Byte;

         BEGIN      { *codeb64* }
           IF (cnt < 3)
             THEN BEGIN
                    t[3] := 0;
                    q[4] := padd;
                  END
             ELSE q[4] := (t[3] AND $3f);

           IF (cnt < 2)
             THEN BEGIN
                    t[2] := 0;
                    q[3] := padd;
                  END
             ELSE q[3] := Byte (((t[2] SHL 2) OR (t[3] SHR 6)) AND $3f);

           q[2] := Byte (((t[1] SHL 4) OR (t[2] SHR 4)) AND $3f);

           q[1] := ((t[1] SHR 2) AND $3f);

           strg := '';
           FOR idx := 1 TO 4 DO
             strg := (strg + code64[(q[idx] + 1)]);

           codeb64 := strg;
         END;       { *codeb64* }

       PROCEDURE decodeb64;

         VAR        { *decodeb64* }
           idx              : Byte;
           q                : quadrupel_at;

         BEGIN      { *decodeb64* }
           cnt := 3;

           FOR idx := 1 TO 4 DO
             BEGIN
               q[idx] := (Pos (strg[idx], code64) - 1);
               IF (q[idx] = padd)
                 THEN Dec (cnt);
             END;

           t[1] := Byte ((q[1] SHL 2) OR ((q[2] SHR 4) AND $03));
           t[2] := Byte ((q[2] SHL 4) OR ((q[3] SHR 2) AND $0f));
           t[3] := Byte ((q[3] SHL 6) OR (q[4] AND $3f));
         END;       { *decodeb64* }

    { INITIALIZATION ********************************************************* }

       END.


  • Profile
    김건림 2003.01.06 16:27
  • Profile
    벤지 2003.01.05 00:00
    jsp 로 이루어 졌다고 하더라도 받는 서버단에 암호화 알고리즘이 어떤것를
    사용하였는지를 말씀해주시면 많은 답변를 받으실수 있으실것으로 사료됩니다.

    MD5, Seed  등등 많은 방식이 있으니까요오....

    이글보시면 삭제하시고 다시 질문 올리세요오...^-^


    • 휴초보
    • 2003.01.04 23:57
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 벤지
      2003.01.04 23:57
      bin 안에 Package 그대로 있습니다. 기본으로는 Tab 에 나타나지 않구요오, 사용하실려면 bin 안에 dclq...
    • 이준억
      2003.01.05 00:23
      화일명이 dclqrt70.bpl 이게 아닌가요
    • 이경일
      2003.01.05 08:55
      감사합니다. 벤지님~ 이준억님~~ bin 디렉토리에 있는 dclqrt70.bpl 파일을 Install Packages에서 add하니...
    • 이창영
    • 2003.01.04 21:34
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 강재규
      2003.01.05 06:51
      저두 잘은 모릅니다. 폼이나 컴퍼넌트의 폰트를 보면 한글이라고 지정을 해보세요... 그럼 다른 os나...
    • 이창영
      2003.01.06 20:12
      작업은 WIN2000에서 했고 WIN98로 되있는 컴퓨터 몇군데에서 문제가 발생했었습니다. pagecontrol 과 폼...
    • 유종근
      2003.01.04 23:11
      안녕하세요.. 전에 저도 같은 경험이 있었거든요.. 그땐...NT4.0에서 작업하고 98에서 돌렸을때 그런 문제...
    • 김건림
    • 2003.01.04 18:46
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김건림
      2003.01.05 03:04
    • 벤지
      2003.01.06 05:58
      이건 제가 만든것이 아니구요오 외국의 어느분께서 만든신거 2개올림니다. 사이트 주소를 잊어먹어서어.....
    • 김건림
      2003.01.06 16:27
    • 벤지
      2003.01.05 00:00
      jsp 로 이루어 졌다고 하더라도 받는 서버단에 암호화 알고리즘이 어떤것를 사용하였는지를 말씀해주시면...
    • 이승근
    • 2003.01.04 14:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 도니
      2003.01.04 20:17
      저두 인터베이스 쓰는데... 자료 없습니다.ㅠ.ㅠ 영어 해석해서 씁니다..ㅠ.ㅠ 자료 구하시면 저두 좀 주...
    • 최병철
    • 2003.01.04 10:24
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김지엽
      2003.01.04 11:15
      Ord(문자) 사용해 보세요.
    • 이추형
      2003.02.15 02:11
      델파이 기본 컴포넌트중에 멀티미디어에 해당하는 것이 있습니다. 이를 참조하시면 쉽게 하실수 있으리라 ...
    • 강재규
      2003.01.05 06:54
      Tbutton 은 setfocus가 가능하고. TSpeedButton은 SetFocus가 가능하지 않아요... 그리고 TButton 돌려...
    • 정종우
      2003.01.04 03:24
      스피드버튼은 포커스가 안갑니다. 그리고 라디오 버튼처럼 그룹을 지정해서 버튼이 눌러진 효과등을 사...
    • 최은석
      2003.01.04 03:21
      특별히 다른점은 없구여.. 스피드버튼에는 이미지를 올려놓을수가 있어여...
    • 박현준
    • 2003.01.04 02:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 벤지
      2003.01.05 00:07
      delphi7 에서 DatNet 을 이용할수 있는 기능이 제공됨니다. borland.com 에 있었는데 지금 찾지를 못하겠...
    • 신강섭
      2003.01.04 21:05
      판넬은 폼 디자인할때 좀 이쁘게 보일라고 많이 쓰져 적적히 사용하면 효율적인 디자인을 할 수 있습니다....
    • 장덕곤
      2003.01.07 06:39
    • 아침이슬
      2003.01.05 01:29
      답변 감사합니다. 역시 예상대로 Pannel 사용시의 가장 큰 효과는 화면확대시의 자연스러움 이었군요.. ...
    • 전원이
    • 2003.01.04 02:05
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최은석
      2003.01.04 03:17
      설치하려는 패키지에 'WebConst, 가 포함되어 잇고 'INET50' 에도 이미 포함되어 있어서 발생합니닷... ...
    • ji
    • 2003.01.04 01:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 벤지
      2003.01.05 00:09
      여기자료실인가?.. www.delmadang.com  에 보시면 관련 컴포넌트가 있습니다 만약, 못찾으시...
    • 최유순
    • 2003.01.04 00:38
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.01.04 00:58
      안녕하세요. 최용일입니다. DLL을 호출하는 프로그램에서 DLL을 디버깅할 수는 없습니다... DLL디버...
    • 최유순
      2003.01.04 01:08
      최용일님 감사합니다. 제가 질문을 잘못 드린것 같네요 저는 최용일님이 말씀하신 "DLL디버깅 하실려면 ...
    • 최용일
      2003.01.04 01:33
      안녕하세요. 최용일입니다. 전 잘 되는데요... 뭔가 잘못하신듯... Host Application설정하시고 DLL...
    • 지상훈
    • 2003.01.04 00:37
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하기
      2003.01.04 00:50
      작업화던 프로젝트를 열리도록 한다는 말이 맞는가요? 그럼 아마도 메뉴의 Tools에서 Environment Option...
    • 잠꾸러기
      2003.01.04 19:02
      거기 있었네요. 감사합니다~ ^^
    • 강재규
      2003.01.05 07:04
      잘은 모르지만 저두 요즘에 xp로 프로그램 을 개발하고 있습니다... 폼의 속성이나 컴퍼넌트들의 속...
    • 조걸
      2003.01.03 22:16
      핸들을 이용해서 해당 report폼이 있는지 없는지 알면 되지 않을까요? findwindow를 이용해서 핸들값이 존...
    • 델초^.^;
      2003.01.03 22:28
      한폼에 QuickRep1, QRPreView1이 있기때문에... 여러개 열린 폼을 찾아 닫아주는 방법을 찾을수가 없네...