Menu



Manage

Study_C > 7-make.c Lines 73 | 2.4 KB
다운로드

                        /*****************************************************************

 * 암호화 복호화 프로그램


 ********************************************************************/

#define _CRT_SECURE_NO_WARNINGS			// scanf오류 제거를 위한 코드
#include<stdio.h>						// 표준 입출력장치 사용을 위한 헤더파일 로드

encrypt(char cipher[], int shift);		// 암호화함수
unencrypt(char cipher[], int shift);	// 복호화함수

int main()								// 메인함수
{
	char cipher[50] = { 0 };			// 문자열을 받을 배열 생성
	int shift = 3;						// 문자열을 옮길 수 생성
	int cho_num = 0;					// 암호화 복호화 설정 코드 변수 초기화

	printf("문자열을 암호화하고싶으면 1번,\n 복호화 하고 싶으면 2번을 입력하고 문자열을 입력하세요.\n : ");
	scanf("%d", &cho_num);				// 입력한 숫자 받기

	if (cho_num == 1)					// 1번 선택시 암호화
	{
		gets_s(cipher, 50);				// 1번 선택 뒤에 문자를 배열에 입력
		encrypt(cipher, shift);			// 암호화함수 불러오기
	}
	else if (cho_num == 2)				// 2번 선택시 복호화
	{
		gets_s(cipher, 50);				// 2번 선택 뒤에 문자를 배열에 입력
		unencrypt(cipher, shift);		// 복호화 함수 불러오기
	}
	else								// 이상한 문자를 처음에 입력한 경우
	{
		printf("잘못된 문자를 입력하셨습니다. 프로그램을 종료합니다.");
	}
	
	return 0;							// 반환 : 없음
}

encrypt (char cipher[], int shift)						// 암호화 함수
{
	int i = 0;											// 변수 초기화

	while (cipher[i] != '\0')							// 배열의 종료코드가 아닌경우
	{
		if (cipher[i] >= 'A' && cipher[i] <= 'z');		// 받는 문자가 영어인경우
		{
			cipher[i] += shift;							// 코드 숫자 3증가
			if (cipher[i] > 'z')						// 코드 숫자가 z를 넘는경우
				cipher[i] -= 26;						// 초기 숫자부터 입력되도록 설정
		}
		i++;											// 다음 배열 순서로 이동
	}
	printf("암호화된 문자열: %s \n", cipher);			// 암호화된 문자열 표시
}

unencrypt(char cipher[], int shift)									// 복호화 함수
{
	int i = 0;														// 변수 초기화

	while (cipher[i] != '\0')										// 배열의 종료코드가 아닌경우
	{
		if (cipher[i] >= 'A' && cipher[i] <= 'z');					// 받는 문자가 영어인경우
		{
			cipher[i] -= shift;										// 코드 숫자 3감소
			if (cipher[i] >= 'x' - 26 && cipher[i] <= 'z'-26)		// 암호화된 원본이 z를 넘겨 초기 숫자부터 입력되도록 설정된 경우
				cipher[i] += 26;									// 위의 경우 복호화 추가계산
		}
		i++;														// 다음 배열 순서로 이동
	}
	printf("복호화된 문자열: %s \n", cipher);						// 복호화된 문자열 표시
}