C language
시저암호 암호화 복호화 소스
GuTTe
2018. 11. 2. 20:52
어세블리어로 시저암호를 만들기위해 먼저 C로 소스코드를 작성함.
아래는 카이사르 암호 복호화, 암호화 과정인데 번호 2번은 작동하지 않는다.
대신 1번을 누르고 암호화 진행 후, 복호화도 같이 진행된다.
#include <stdio.h>
#include <string.h>
/*
카이사르 암호 만들기
암호화 & 복호화 만들기 키는 0~25 총 26개
암호화 과정 'P' - 'A' 해서 나온값에 key를 더하고 %26을 한다.
복호화과정에선 'P' - 'A' 해서 나온값에 key를 빼고 %26을 한다 만약 -가 나올경우 26을 더한다.
*/
void Crypto(char* plain, int key);
void Encrypto(char* crypto_text);
int main(void)
{
int i;
int len;
int check;
char buf[80];
int key;
printf("1. Crypto\n2. Encrypto\n: ");
scanf("%d",&check);
getchar();
printf("input your plain : ");
fgets(buf, sizeof(buf)-1, stdin);
len = strlen(buf);
buf[len-1] = '\0';
if(check == 1)
{
do{
printf("input your correct key(0~25) : ");
scanf("%d",&key);
}
while(key < 0 && key > 25);
Crypto(buf, key);
printf("%s\n", buf);
Encrypto(buf);
}
else if(check == 2)
{
Encrypto(buf);
}
return 0;
}
void Crypto(char* plain, int key)
{
int len = strlen(plain);
int i;
for(i=0;i<len;i++)
{
if(plain[i] == 0x20)
{
continue;
}
else
plain[i] = (plain[i] - 'A' + key) % 26 + 'A';
}
}
void Encrypto(char* text)
{
int len;
char print_plain[80];
int i;
int key;
int tmp;
for(key=0;key<26;key++)
{
strcpy(print_plain, text);
len = strlen(print_plain);
//printf("%s\n",print_plain);
for(i=0;i<len;i++)
{
if(print_plain[i] == 0x20)
{
continue;
}
print_plain[i] = (print_plain[i] - 'A' - key + 26)%26;
//printf("%d\n", print_plain[i]);
print_plain[i] += 'A';
//printf("%d\n", print_plain[i]);
}
printf("key : %d plain : %s\n",key, print_plain);
}
}