c언어 암호화 복호화코드인데 왜틀렸을까요(비즈네르 암호)
#include
#include
#include
#include
#define MAX_MSG_SIZE 100
#define MAX_KEY 26
#define MAX_KEY_SIZE 9
#define TRUE 1
#define FALSE 0
char getMode();
void getMessage(char Message[]);
void getKey(char key[]);
void translateMessage(char mode, char key[], char Message[], char TMessage[]);
char getMode()
{
int mode;
while(TRUE)
{
printf("==========================\n");
printf("e.메세지 암호화\n");
printf("d.암호문 복호화\n");
printf("==========================\n");
printf(">>기능을 선택하세요 : ");
mode=getchar();
mode=tolower(mode);
if(mode=='e'||mode=='d')
{
return mode;
}
}
}
void getMessage(char Message[])
{
fflush(stdin);
printf(">>메세지를 입력하세요.\n");
gets(Message);
}
void getKey(char key[])
{
int idx;
while(TRUE)
{
printf(">>키 값을 입력하세요(최대 %d글자): ", MAX_KEY_SIZE -1);
scanf("%s", key);
for(idx=0; key[idx] && islower(key[idx]); idx++);
if(idx==strlen(key))
{
return;
}
}
}
void translateMessage(char mode, char key[], char Message[], char TMessage[])
{
char symbol; int idx, num, keyidx=0;;
memset(TMessage, 0, MAX_MSG_SIZE);
for(idx=0; idx
{
symbol=Message[idx];
if(isalpha(symbol)){
num=symbol;
if(mode=='e')
{
num+=key[keyidx]-'a';
if((isupper(symbol) && num>'Z')||(islower(symbol) && num>'z'))
{
num-=MAX_KEY;
}
}
else
{
num-=key[keyidx]-'a';
if((isupper(symbol) && num<'A')||(islower(symbol) && num<'a'))
{
num+=MAX_KEY;
}
}
TMessage[idx]=num;
}
else
{
TMessage[idx]=symbol;
}
keyidx=(keyidx+1)%strlen(key);
}
}
int main()
{
char mode;
char key[MAX_KEY_SIZE];
char Message[MAX_MSG_SIZE];
char TMessage[MAX_MSG_SIZE];
mode=getMode();
switch(mode){
case 'e':
printf("메시지를 암호화합니다.\n");
getMessage(Message);
getKey(key);
translateMessage(mode, key, Message, TMessage);
printf("암호문 : %s\n", TMessage);
case 'd':
printf("메시지를 복호화합니다.\n");
getMessage(Message);
getKey(key);
translateMessage(mode, key, Message, TMessage);
printf("복호문 : %s\n", TMessage);
}
}

코드
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #define MAX_MSG_SIZE 100 #define MAX_KEY 26 #define MAX_KEY_SIZE 9 #define TRUE 1 #define FALSE 0 char getMode(); void getMessage(char Message[]); void getKey(char key[]); void translateMessage(char mode, char key[], char Message[], char TMessage[]); char getMode() { int mode; while(TRUE) { printf("==========================\n"); printf("e.메세지 암호화\n"); printf("d.암호문 복호화\n"); printf("==========================\n"); printf(">>기능을 선택하세요 : "); mode=getchar(); mode=tolower(mode); if(mode=='e'||mode=='d') { return mode; } } } void getMessage(char Message[]) { fflush(stdin); printf(">>메세지를 입력하세요.\n"); gets(Message); } void getKey(char key[]) { int idx; while(TRUE) { printf(">>키 값을 입력하세요(최대 %d글자): ", MAX_KEY_SIZE -1); scanf("%s", key); for(idx=0; key[idx] && islower(key[idx]); idx++); if(idx==strlen(key)) { return; } } } void translateMessage(char mode, char key[], char Message[], char TMessage[]) { char symbol; int idx, num, keyidx=0;; memset(TMessage, 0, MAX_MSG_SIZE); for(idx=0; idx<strlen(Message); idx++) { symbol=Message[idx]; if(isalpha(symbol)){ num=symbol; if(mode=='e') { num+=key[keyidx]-'a'; if((isupper(symbol) && num>'Z')||(islower(symbol) && num>'z')) { num-=MAX_KEY; } } else { num-=key[keyidx]-'a'; if((isupper(symbol) && num<'A')||(islower(symbol) && num<'a')) { num+=MAX_KEY; } } TMessage[idx]=num; } else { TMessage[idx]=symbol; } keyidx=(keyidx+1)%strlen(key); } } int main() { char mode; char key[MAX_KEY_SIZE]; char Message[MAX_MSG_SIZE]; char TMessage[MAX_MSG_SIZE]; mode=getMode(); switch(mode){ case 'e': printf("메시지를 암호화합니다.\n"); getMessage(Message); getKey(key); translateMessage(mode, key, Message, TMessage); printf("암호문 : %s\n", TMessage); case 'd': printf("메시지를 복호화합니다.\n"); getMessage(Message); getKey(key); translateMessage(mode, key, Message, TMessage); printf("복호문 : %s\n", TMessage); } }댓글 달기