메시지, 파일 암호화 및 복호화하기


메시지, 파일 암호화 및 복호화하기


이번에는 메시지 암호화 및 복호화 하는 방법을 알아보겠다.
일단 암호화란 무엇일까??
문서 및 메시지를 다른 사람이 구분할 수 없는 문자 코드로 변경하는 것을 뜻합니다.

복호화는 무엇일까??
암호화된 문서 및 메시지를 원래의 형태로 복원하는 것을 뜻합니다.

우리는 XOR 연산으로 암호화를 해 보겠다.

#include <stdio.h>
#define SECRETKEY "!@#$%^&*()_+=-"
int strlen(char *dest);
int main()
{
    char string[] = "1234567890";
    int n = strlen(string);
    puts(string);
    for (int i = 0; i < n; i++)
        string[i] ^= SECRETKEY[i];
    puts(string);
    for (int i = 0; i < n; i++)
        string[i] ^= SECRETKEY[i];
    puts(string);
}
int strlen(char *dest)
{
    int n = 0;
    while (*dest++) n++;
    return n;
}


< 출력 >


2행에서 메시지 암호화 및 복호화에 사용될 키를 정의한다.

6행에서 암호화시킬 문자열을 정의한다.

9~10행에서 메시지를 암호화 한다. 비트 XOR(^) 연산은 각각의 비트 값을 비교하여 모두 0이거나 모두 1인경우는 0으로,

둘중의 하나만 1인 경우 1로 설정한다.

12~13행은 메시지 복호화를 한다.


이렇게 메시지를 암호화 하는 프로그램을 만들어 보았다.

기본적인 예이다. 나중에 이것을 채팅프로그램을 만들때 써봐야 겠다.



파일 암호화 및 복호화 하기

이번에는 파일 암호화를 시키고 복호화를 시켜보자.
#include <stdio.h>
int encryption();
int main()
{
    encryption();
}
int encryption()
{
    char data[1024];
    char secret[16] = { "!@#$%^&*()_><,." };
    FILE *fp;
    size_t read_size, i;
    long frpos, fwpos;
    errno_t err;
 
    err = fopen_s(&fp, "C:\\Users\\aossu\\Desktop\\test.txt", "r+b");
    if (err != 0) {
        perror("파일 열기 에러");
        return -1;
    }
    while (!feof(fp)) {
        fwpos = ftell(fp);
        read_size = fread(data, 1, 1024, fp);
        if (read_size == 0) break;
        for (i = 0; i < read_size; i++)
            data[i] ^= secret[i % 16];
        frpos = ftell(fp);
        fseek(fp, fwpos, SEEK_SET);
        fwrite(data, 1, read_size, fp);
        fseek(fp, frpos, SEEK_SET);
    }
    fclose(fp);
    return 1;
}

< 메모장 초기 내용 >


< 실행 후 메모장 내용 >


10행에서 암호화 키를 정의한다.

13행에서 파일의 읽고 쓸 위치를 저장할 변수를 선언한다.

21행에서 파일이 끝까지 반복문을 돌린다.

22행에서 현재 파일의 위치를 fwpos 변수에 넣는다.

23행에서 파일을 1024바이트 만큼 읽는다. 읽을 파일의 길이가 1024보다 작다면 그 크기만큼만 읽혀진다.

24행에서 읽혀진 파일의 길이가 0 이라면 프로그램을 종료한다.

25~26행에서 암호화 작업을 한다.

27행에서 현재 파일의 위치를 frpos에 넣는다.

28행에서 파일의 위치를 처음으로 옮긴다.

29행에서 data에 담긴 데이터를 파일에다가 read_size만큼 1바이트씩 쓴다.

30행에서 파일의 위치를 처음의 위치에서 frpos만큼 떨어진곳에 위치를 한다.


이렇게 메시지와 파일 암호화 및 복호화를 시켜보았다.

상용화된 암호화 알고리즘은 DES, 3DES, IDEA, MD5 등이 있으며 암호화 전문 서적을 참조하면 되겠다.



[프로그래밍/C] - 파일 입출력 (1)

[프로그래밍/C] - 파일 입출력 (2)





댓글

Designed by JB FACTORY