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


LIST ALL
Posted by 권선중2005-06-29 14:25:36, Hit : 4881
[끼적강좌 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
119
   창조에서 반올림하기 [1]
지상현 2013/01/05  5014
118
   컴퓨터에서 소수점을 표기하는 방식에 대해 [1]
지상현 2012/01/03  7527
117
   창조의 변수형에 대한 고찰 [1]
지상현 2012/01/03  5787
116
   창조 초보자들을 위한 아주 기본적인 사용법
김대명 2011/03/09  6226
115
   객체 배열을 정복해보자! [1]
지상현 2010/06/28  6996
114
   [0강] 그림판에 그림을 그려보자!
박종훈 2009/10/24  6632
113
     [1강] 그림과 관련된 객체
박종훈 2009/10/24  5764
112
       [2강] ㅎ그림판에 그림을 그리기 위해 준비단계
박종훈 2009/10/24  5976
111
   [수정!] 직선, 사각형, 타원, 원, 호, 현을 그려보자! [4]
박종훈 2009/05/10  6665
110
     [0강] ㅎ배경의 좌표 체계에 대해서 알아보자! [2]
박종훈 2009/10/24  7025
109
       [1강] 직선을 그려보자!
박종훈 2009/10/24  7728
108
         [2강] 사각형을 그려보자!
박종훈 2009/10/24  5626
107
           [3강] 타원을 그려보자! (원 포함)
박종훈 2009/10/24  8378
106
             [4강] 현, 호를 그려보자! [4]
박종훈 2009/10/24  6263
105
     호현계산기2 Rev2 [6]
박종훈 2009/10/23  5876
104
   기타 자료실에 있는 다람쥐어 (파악해 보자_) [2]
김제형 2009/05/03  5778
103
   맞짱! 포인터(Pointer) - 3부 [창조에서 포인터를 사용해보자!] ... 제작중
박종훈 2009/02/26  5939
102
   맞짱! 포인터(Pointer) - 2부 [C언어 포인터 존재를 확인하자!]
박종훈 2009/02/26  7298
101
   맞짱! 포인터(Pointer) - 1부 [C언어 들춰보자!] [7]
박종훈 2009/02/26  6275
100
   자연수들의 합 쉽게 구하는 방법(수학과 프로그래밍) [7]
박종훈 2009/02/15  6129
99
   창조입문 : 메모장 만들기 [2]
신용주 2008/12/20  7554
98
   창조와 ActiveX (2)
지상현 2007/08/11  10802
97
   창조와 ActiveX (1)
지상현 2007/08/07  8286
96
   골칫거리 ㅎ사용자함수 DLL하나로 해결하기! [7]
박종훈 2007/06/23  7114
95
   환경파일로 파워유저되어보자![개정판] [예제/사용!] 2 [6]
박종훈 2007/01/02  7771
LIST ALL   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이희철
로그인