소개글
VC++로 만든 심플데스의 소스입니다.
VC 6.0을 이용해 API로 만들었습니다.
C++문법을 썼기때문에 CSDes 클래스만 옮겨가시면 MFC에도 바로 적용할 수 있습니다.
## 소스 ##
VC++로 만든 SDES 프로젝트 화일 전체
실행화일
컴파일 실행환경
1. 문제
2. 문제 정의/분석
3. 알고리즘에 대한 설명
4. Flow Chart
5. 소스의 데이타 구조
6. 프로그램의 실행 예제
7. 프로그램 소스
8. 참고문헌
압축파일 목록
flags.h
S_Des.cpp
S_Des.h
SDesMain.cpp
SDesMain.h
SimpleDes.dsp
SimpleDes.dsw
SimpleDes.ncb
SimpleDes.opt
SimpleDes.plg
Debug
SimpleDes.exe
본문내용
1. 문 제
Simple DES를 프로그램으로 구현하라.
2. 문제 정의/분석
➜ S-DES의 암호 알고리즘은 8비트의 평문 블록과 10비트의 키를 입력으로 취하여 8비트의 암호문 블록을 출력한다.
➜ S-DES의 복호 알고리즘은 8비트의 암호문 블록과 그 암호문 생성에 사용되었던 10비트 키를 입력으로 취하여 원래의 8비트 평문 블록을 출력으로 생성한다.
➜ S-DES를 암호화 알고리즘을 구현하기 위해서는 대략 아래와 같은 함수들이 있어야 한다.
⇨ 초기순열(IP) : 데이터 내부의 비트들의 순서를 바꾼다.
⇨ fk : 순열과 치환을 포함하고 키 입력에 의존한다.
⇨ SW : 데이터의 두 절반 부분을 상호 교환하는 간단한 순열 함수
⇨ 역순열 함수(IP-1) : 초기순열의 역
3. 알고리즘에 대한 설명
➜ 서브키 생성 알고리즘
1) 10비트의 키를 입력받아, 초기순열에 넣어 자리배치를 바꾼다.
P10 (k1,k2,k3,k4,k5,k6,k7,k8,k9,k10) = (k3,k5,k2,k7,k4,k10,k1,k9,k8,k6)
2) 10비트의 키를 상위 5비트와 하위 5비트로 나누어 각각을 왼쪽으로 Rotate 한다.
3) 10비트 중 8비트만을 골라서 치환한다.
P8 (6,3,7,4,8,5,10,9)
4) P8로 치환한 값을 서브키(K1)로 한다.
5) 2)번에서 생성된 결과를 상위 5비트와 하위 5비트로 나누어 각각을 왼쪽으로 2비트만큼 Rotate 한다.
6) 10비트 중 8비트만을 골라서 치환한다. (P8)
7) P8로 치환된 두 번째 값을 서브키(K2)로 한다.
➜ 암호화 알고리즘
1) 8비트의 데이터를 초기순열(IP)에 넣어 자리를 바꾼다.
IP (2,6,3,1,4,8,5,7)
2) 함수 fk에 넣는다.
(1) 8비트중 상위 4비트, 하위 4비트로 나눈다.
(2) 상위 4비트를 확장순열 한다.
E/P (4,1,2,3,2,3,4,1)
(3) 확장순열 결과와 K1을 XOR연산한다.
참고 자료
컴퓨터 통신보안 (최용락 외 3명 공역) / 도서출판 그린
VC++와 원도우 프로그래밍 (김주호 외 1명 공저)