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


LIST ALL
Posted by 권선중2005-06-29 14:25:36, Hit : 4860
[끼적강좌 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
   리소스 해커를 이용하여 DLL 파일안의 HTML 문서 넣기! [4]
qkrwhdgns 2005/07/20  5663
68
   [끼적강좌 8]RPG게임을 만들어보자 [1강] [3]
권선중 2005/07/16  6066
67
     [re] [끼적강좌 8]RPG게임을 만들어보자 [2강] [1]
권선중 2005/07/17  5694
66
   [끼적강좌7] 달력 구현강좌 [1강][초급]
권선중 2005/07/11  5147
65
     [끼적강좌7] 달력 구현강좌 [2강][고급]
권선중 2005/07/15  4851
64
       [끼적강좌7] 달력 구현강좌 [3강][응용]
권선중 2005/07/16  4633

   [끼적강좌 6] 선중이 계발한 암호화구현 [7]
권선중 2005/06/29  4860
62
   [끼적 강좌] 기본문법을 알아야 한다...! [10]
권선중 2005/06/27  4922
61
   [끼적강좌 5] 로그인 구현강좌 [1강][초급] [6]
권선중 2005/06/24  5447
60
     [끼적강좌 5] 로그인 구현강좌 [2강][중급] [2]
권선중 2005/06/25  5568
59
       [끼적강좌 5] 로그인 구현강좌 [3강][고급] [3]
권선중 2005/06/26  5352
58
         [re] [끼적강좌 5] 로그인 구현강좌 [4강][다계정 구현] [5]
권선중 2005/06/27  5004
57
   마우스 오른쪽 눌렀을때의 메뉴 뜨게하기(초보용)
이시영 2005/02/02  5144
56
   [쉬운강좌1]환경파일 다루기 [3]
정성우 2005/01/11  5461
55
   영문 윈도우에서의 창조로 만든 프로그램.. [16]
손상진 2005/01/02  5942
54
   [ps.구루 강좌 #12♭]포인터를 왜 씁니까? [2]
ps.이진백 2004/12/31  6309
53
     [re] [ps.구루 강좌 #12♭]포인터를 왜 씁니까? [1]
지상현 2005/01/01  5623
52
   창조의 한계를 뛰어 넘어서 #1: '문자' 포인터 써먹기 [4]
지상현 2004/11/23  6931
51
   [ps.구루 강좌#11] 서비스팩2에서 프로그램 추가/제거 설정
ps.이진백 2004/10/26  5465
50
   대박로또에 적용된 자동업데이트 알고리즘.. [7]
최재일 2004/09/13  7936
49
   [삐까뻔쩍강좌] 오랜만에 글쓰네.. [10]
박재성[날개달기] 2004/09/07  4983
48
   [보충강좌#10-1] *.Res를 위한 *.Rc [1]
ps.이진백 2004/08/12  6154
47
   [강좌#10] DLL에 HTML 쑤셔넣기 [6]
ps.이진백 2004/08/06  6211
46
   방금생각한 암호화 알고리즘 - -;; [2]
박재성[날개달기] 2004/07/29  5667
45
   [끼적강좌 4] 창조 구현 DB강좌 [1강] [5]
권선중 2004/07/25  5825
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이희철
로그인