Tuuna Computer Science

시저암호 암호화 복호화 소스 본문

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);
    }
}



Comments