본문 바로가기

프로그래밍/C

[C언어] 시저암호(crypto cipher)

네 로말입니다.

오늘은 시저 암호에 관한 C언어로 만든 소스를 설명(?)해 드리도록하겠습니다.

일단 시저 암호가 무엇인지 알아야하겠네요. 


일단 쥴리어스 시저(Julius Caesar, 100-44 B.C.) 가 유용하게 이용해서 시저암호라고 불립니다.


간단하게 말해서 'COME TO ROME' 을 암호화 하면 'FRPH WR URPH' 이됨니다.

한글로 간단하게 설명하면

가,나,다,라,마,바,사,아,자,차,카,타,파,하

이렇게 있으면

가나다 를 암호화하면 라마바 가됨니다.

그냥 오른쪽으로 3칸 이동 하는거죠ㅎㅎ

복보화할때는 3칸 왼쪽으로이동이구요.

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z


Z를 넘어가는경우에는 A로 옮겨짐니다.


#include <stdio.h>


void main() {

int a=0,i=0;

char b[20],c[20],d[20],e[20],f;


while(1){

fflush(stdin);

printf("┌─────┐\n");

printf("│암호화= A│\n");

printf("│복보화= B│\n");

printf("│제작자= C│\n");

printf("│나가기= Q│\n");

printf("└─────┘\n  : ");

scanf("%c",&f);

fflush(stdin);

switch(f)

{

case 'A':

case 'a':

printf("문자를입력하세요. : ");

scanf("%s",b);

printf("움직일문자갯수: ");

scanf("%d",&a);


while( *(b+i) !='\0')  //암호화할 문자의 첫번째에서 마지막 NULL값이 있을때까지 While 문이 돌아갑니다.

{

c[i]=b[i]+a; //B[i]문자에 + a 만큼 이동후 C[i]에 저장됩니다.

i=i+1; // B[i] 니까 한칸 움직여야되니 i+1 을합니다.

}

c[i]='\0';

printf("암호화된암호: %s\n",c);

i=0;

break;


case 'B':

case 'b':

printf("암호화된문자를입력하세요. : ");

scanf("%s",d);

printf("움직일문자갯수: ");

scanf("%d",&a);

while( *(d+i) !='\0')  //암호화할 문자의 첫번째에서 마지막 NULL값이 있을때까지 While 문이 돌아갑니다.

{

e[i]=d[i]-a; //B[i]문자에 + a 만큼 이동후 C[i]에 저장됩니다.

i=i+1; // B[i] 니까 한칸 움직여야되니 i+1 을합니다.

}

e[i]='\0';

printf("복보화된암호: %s\n",e);

break;

case 'C':

case 'c':

printf("제작자: 로말\n");

break;

case 'Q':

case 'q':

printf("프로그램을종료합니다.\n");

exit(0);

}

}

}


소스는 이렇게됩니다.

제가 잘못만들어서 ㅋㅋ

Z이상 넘어가면 A로 가는걸안했습니다.

A로 가게하는건 저기소스에서 26을 빼주시면됩니다.

영어 알파벳이 26개니까요.

지금 글쓰는 PC에 비주얼스튜디오가없어서 수정을못하네요.

괜히 그냥 해서 올렸다가 오류나면 ㅋㅋ

암호화 소스만 있으면 쉽습니다.


왜냐하면 암호화는 + N 만해주면되고 복보화는 - N 이면되니까요 ㅎ


너무 어렵게 설명했나요 ㅋㅋ


소스파일 올립니다.


씨저.c