창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


LIST ALL
Posted by 권선중2005-06-29 14:25:36, Hit : 4873
[끼적강좌 6] 선중이 계발한 암호화구현
Homepage : http://ever2ksj.woobi.co.kr/
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=open_lec&no=71

이름이 거창하죠...
선중이 계발한..^^

이강좌를 보시기전 반드시 로그인강좌 고급 부분의 암호화 부분을 보신후 읽어주시기 바랍니다.. 그러시면 좀 더 빠른 이해를 하실수있을 것입니다..
그리고 이전에 설명했던 중복 부분에 대해서는 그냥 대충 대충 설명하겠습니다..

이계발 버젼은 솔직히 암호화 구조를 알고있다고해도 풀이한다는건 거의 불가능합니다..
이유인 즉 각 데이타별로 별도의 코드로 저장되고 그 코등에 사용자가 지정한 코드를 삽입하는 방식이기때문입니다..

Ex) Data 1   2   3    4   5   6   Pw  1    2   3   4
              
위처럼 있다면 

     Data 1    2   3   4    5   6
      Pw  1    2   3   4    1   2        
  암호화  2   4   6   8     6  8

과 같은식으로 저장됩니다..
즉 암호화 의 일관성이 없기때문에 암호화를 지정 페스워드 없이 복구한다는건 불가능합니다.

그럼 간단히 소스를 보면서 설명을 드리겠습니다..[소스자료실 소스 참고]

/////////////////////////////// 사용자함수0 ///////////////////////////////////


-------------------------------[ 암호화 ]-----------------------------------------
문자함수:암호화(문자:본문,암호);       //<----- 함수 선언부[원문과,암호를 문자로 받는다
----------------------------------------------------------------------------------

실수:수,반수,암수[100];     // <--- 암수[100]은 암호를 99자까지 설정하도록 해준것이다
문자:문;                          
본문:=공백제거(본문);        // <--- 입력받은 문자에 좌우 공백 제거
//---[1]------
반복{
암수[반수]:=문수(문자복사(암호, 반수, 1));   // <---  암호를 코드로 변환하여 배열에
반수:=반수+1;                                           //          지정한다
} 까지(문자길이(암호)<반수);  반수:=0;        //  <--- 암호의 길이만큼 반복하도록 지정
//-------------


수:=1;

//----[2]-----                                                 //       ---- 아래 /는 각코드의 구분     
반복{                                                               //     v       을 두기 위함입니다. 
문:=문+수를문(문수(문자복사(본문, 수, 1))+암수[반수])+"/";  //<-- 본문을 코드화하여
수:=수+1;                                                                       //      순차적으로 암호화
반수:=반수+1;                                                                 //      결합한다.
만일(반수>문자길이(암호)){ 반수:=0; }  //<-- 암호의 끝이돼면 다시 처음으로 돌려준다
} 까지(문자길이(본문)< 수);                // <-- 본문의 길이만큼 반복하도록 설정 
//--------------
결과:=문;

------------------------------------------------------------------------------------


간단히 실행예를 봅시다

"1234" 를 코드화 하면 "49 ,50 , 51,52"   가됩니다.. 1234가 암호라고 합시다..
가나다라마 를  코드화하면 "176,161,179,170,180,217,182,243,184,182"가됩니다 "가~마"본문이라고 합시다..
그럼 위 명령에서 [1]부분이 암호 1234를 다음과 같이 바꾸어 주는것입니다..
암수[0] = 49      <----- 1을 코드화한것입니다.. 아래는 순서대로..
암수[1] = 50      
암수[2] = 51
암수[3] = 52
로 설정해주는것입니다..

그럼 위 명령에서 [2]는 본문"가~마"를  다음과 같이 해주는것입니다..
176+암수[0]
161+암수[1]
179+암수[2]
170+암수[3]
암수의 끝부분이므로 다시 돌려서 암수[0]이 들어가도록 해준다..
180+암수[0]
.
.
.
.
182+암수[1]
을 연산하여 다음 다음과 같이 출려해준다..

225/210/229/221/232/266/231/293/235/234/   <---- 이것이 암호화 된 문장이다..
첫 문자는 176+암수[0] 즉 176+49 다 그러므로 225가된다..

그러 실행 명령을 볼까요..

문:=사용자함수0.암호화(원문 , 암호);

여기까지가 암호화 부분이었습니다..

/////중간 쉼타임////////////////////     /)    /)/)
//이번강좌 생각보다 어렵네요..ㅠㅠ //    (  ')3(..  )
/////////////////////////////////// ----n--n-n--- 


그럼 계속 계속 복구화 부분으로 가볼까요...

그럼 복구는 위 과정을 반대로 하면돼겠죠..^^


Ex) Data  2   4   6   8   6  8  Pw  1    2   3   4
              
위처럼 있다면 

암호화된문  2   4    6   8    6   8
          Pw  1    2   3    4    1   2        <--- 암호화 된 문에서 페스워드를 빼준다..
  Data        1    2   3    4    5   6

즉 암화 된 데이타에서 암호를 빼주는것입니다..

역시 위에서 말한것처럼 각 다윈별로 서로 다른 페스워드가 지정되기 대문에 지정페스워드 없이 복구는 불가능합니다..

그럼 소스를 보겠습니다..


/////////////////////////////// 사용자함수0 ///////////////////////////////////


-------------------------------[ 복호화 ]-----------------------------------------
문자함수:복호화(문자:암호문,암호); //<----- 함수 선언부[암호문과 암호를 문자로 받는다
----------------------------------------------------------------------------------

실수:수,반수,위치,암수[100];
문자:문,문1;
문1:=암호문;


반복{
암수[반수]:=문수(문자복사(암호, 반수, 1));
반수:=반수+1;
} 까지(문자길이(암호)<반수);  반수:=0;


//---- 위 부분은  위 암호화 부분에서 설명했으므로 생략합니다.. -----//


반복{
위치:=문자찾아("/",문1);          // 코드의 끝을 찾는다 "/"를 검색            
만일(위치=0){ 결과:=문;나가; }
아니면{
문:=문+수문(문을수(문자복사(문1, 1, 위치-1),0)-암수[반수]);   //<--코드화 된암호를 제거
문1:=문자삭제(문1,1,위치); }                                               // 후 다시 문자로 돌려준다
수:=수+1;
반수:=반수+1;
만일(반수>문자길이(암호)){ 반수:=0;}
} 까지(위치=100);
결과:=문;

------------------------------------------------------------------------------------

주석을 단 부분이왜는 위에서 설명한것과 모두 같은기능이다..
[[ 나머지 부분은 위 주석을 참고하세요...]

위에서 지정한 암호는 1234입니다..
즉 1234를 코드화 하면  "49 ,50 , 51,52"   가됩니다
그리고 그것을 다음처럼 지정하겠죠..[위에서 설명했었듯...]
암수[0] = 49     
암수[1] = 50      
암수[2] = 51
암수[3] = 52

자 이것을 하씩 암호문에서 빼봅시다..

225/210/229/221/232/266/231/293/235/234/  위에서 암호화 한것입니다..



그럼 위 명령에서 [2]는 본문"가~마"를  다음과 같이 해주는것입니다..
225-암수[0]
210-암수[1]
229-암수[2]
221-암수[3]
암수의 끝부분이므로 다시 돌려서 암수[0]이 들어가도록 해준다..
232-암수[0]
.
.
.
.
234-암수[1]
을 연산하여 다음 다음과 같이 출려해준다..

 176,161,179,170,180,217,182,243,184,182 <---- 이것이 복구된 코드이다..
첫 문자는 225-암수[0] 즉 225-49 다 그러므로 176가된다..

자 이코드를 다시 문로 바꾸려면 다음명령이 사용된다..
"수문" 이라는 명령이 이용되는다 이 명령은 아스키 코드를 문자료 표시해주는 명령이다..

문:=수문(176)+수문(161)      --> 가 로 표시된다..

그럼 사용명령법을 볼까요..

문:=사용자함수0.복호화(암화된문,암호화 할때 지정한 암호);

역시 반환 문이기대문에 복호후 문이라는 곳에 반환하다..

어떻게 보변 복구 부분이 더 중요하다 위에 암호화 부분에서 다 설명을 했기때문에 더 설명할것이 없네요..^^

이번강좌는 어떠했는지 모르겠네요..
조금이나마 유익했음 좋겠네요...




정성우   2005-06-29 PM 8:34:00  
와~ 괜찮은 방법이네요
정성우   2005-06-29 PM 8:34:53  
그런데... 암호가 안맞는지 아는 방법은 어떻게 할지...
김동민   2005-06-30 AM 8:45:27  
PHP+MySQL에서 회원정보 처리할 때 회원 비밀번호나 주민번호
등의 중요한 자료는 복호화가 불가능한 MD5 등의 알고리즘을 통해서
암호화 시킵니다.

사용자가 입력한 패스워드를 그 때 그 때 암호화 함수로 처리하여
DB에 저장된 값과 비교할 뿐입니다, 맞는지 틀린지;;

뭐 그런 방식으로 체크를 하지요. : )
권선중   2005-06-30 AM 11:48:01  
암호가 맞고 안맞고를 알필요가 없죠..
우선적으로 암호가 맞지 않으면 복구가 안돼니 텍스트 자체를 읽을수없는 이상한 문자가 됩니다..
이건 로그인이 아니기때문에 암호 비교를 할필요가 없는 거죠..^^
정성우   2005-06-30 PM 2:59:44  
뉴스에서 MD5 복호화 가능하다고 봤는데요.... 중국인...
그런데 아스키 값에 암호를 더하는 건가요?(자세히 볼 시간이 없어서...)
그러면 무차별 대입으로 나올수도...
김동민   2005-06-30 PM 5:56:44  
중국의 왕샤오윈은 MD5를 깨버렸다기 보다는
대입법이 아닌 다른 방법으로 동일한 값을 만들어 낼 수 있는
방법을 알아냈다고 하는 게 더 맞는 것 같습니다.;;
말하자면 단순하게 새로운 공격법 정도라 할 수 있겠네요.

에, 그리고 조금 더 덧붙이자면 MD5는 암호화라기 보다는
손실 압축법 정도랄까;; 여하튼 해싱(Hashing)에 가깝습니다.
그 때문에 한 번 암호화된 것을 역으로 원래값을 구한다는 것은
불가능하죠.
지상현   2005-09-04 PM 1:54:43  
MD5도 CRC 비슷한 겁니다.
CRC는 파일 내용이 조금만 바뀌어도 값이 확 달라지죠?
그렇다고 CRC에서 원본 파일을 만들어내는 것은 말도 안되지요~(가능하다면 압축이 필요 없을 듯 -_-; )
LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
69
   [창조]#02. 변수에 대하여.. [5]
nylon 2002/09/08  6185
68
   [창조x] 수줍은 pda프로그래밍시작
이진백 2006/09/11  5796
67
   [중급 강좌] 객체의 동적 생성 - 1 [6]
웃음맨 2002/12/25  5076
66
   [요청강좌#14] DLL제작 강의 (미완성) [4]
이진백 2005/10/09  5611
65
   [쉬운강좌]창조에서 이쁜 아이콘 사용하자. [1]
창조신화 2002/09/08  6753
64
   [쉬운강좌]#4.창조에서 압축프로그램만들자.(1) [8]
창조신화 2002/09/16  7138
63
   [쉬운강좌]#3.레지스트리 막 건드리기. [3]
창조신화 2002/09/08  6054
62
   [쉬운강좌]#2.레지스트리 이용하기. [1]
창조신화 2002/09/08  6694
61
   [쉬운강좌1]환경파일 다루기 [3]
정성우 2005/01/11  5466
60
   [수정!] 직선, 사각형, 타원, 원, 호, 현을 그려보자! [4]
박종훈 2009/05/10  6661
59
   [삐까뻔쩍강좌] 오랜만에 글쓰네.. [10]
박재성[날개달기] 2004/09/07  4989
58
   [보충강좌#10-1] *.Res를 위한 *.Rc [1]
ps.이진백 2004/08/12  6162
57
       [끼적강좌7] 달력 구현강좌 [3강][응용]
권선중 2005/07/16  4637
56
     [끼적강좌7] 달력 구현강좌 [2강][고급]
권선중 2005/07/15  4857
55
   [끼적강좌7] 달력 구현강좌 [1강][초급]
권선중 2005/07/11  5151
54
   [끼적강좌 8]RPG게임을 만들어보자 [1강] [3]
권선중 2005/07/16  6074

   [끼적강좌 6] 선중이 계발한 암호화구현 [7]
권선중 2005/06/29  4873
52
       [끼적강좌 5] 로그인 구현강좌 [3강][고급] [3]
권선중 2005/06/26  5361
51
     [끼적강좌 5] 로그인 구현강좌 [2강][중급] [2]
권선중 2005/06/25  5580
50
   [끼적강좌 5] 로그인 구현강좌 [1강][초급] [6]
권선중 2005/06/24  5453
49
   [끼적강좌 4] 텝 메뉴 만들기 [입문] [2]
권선중 2004/02/28  6361
48
   [끼적강좌 4] 창조 구현 DB강좌 [1강] [5]
권선중 2004/07/25  5834
47
   [끼적강좌 3] 에디트 만들기[투명에디트] [1]
권선중 2004/02/09  5925
46
     [끼적강좌 2] 개성있는 메뉴 만들기 [초급보충+중급]
권선중 2004/02/28  4751
45
   [끼적강좌 2] 개성있는 메뉴 만들기 [초급] [1]
권선중 2004/02/09  5049
LIST ALL   Prev [1][2] 3 [4][5] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인