^mask를 이용한 암호화, & mask를 이용한 이진수 출력 [언제나 C언어]

안녕하세요. 언제나 휴일에 언휴예요.


이번 강의는 비트 연산을 이용한 mask입니다.


^ mask를 이용하여 암호화하는 것과 & mask를 이용하여 이진수를 출력하는 실습이예요.

1.^mask를 이용한 암호화
2.&mask를 이용한 이진수 출력

1. ^mask를 이용한 암호화

비트 연산 이용하면 간단한 대칭형 암호화를 할 수 있어요.
대칭형 암호화는 암호화할 때와 복호화할 때 같은 키를 이용하는 암호화를 말합니다.

다음의 코드는 ^연산을 이용하여 평문을 암호화하고 복호화하는 예제입니다.

#include 

int main()
{
    int pd = 0x12345678;
    int key = 0x2345873a;
    int sec = pd ^ key;
    int data = sec ^ key;
    printf("평문:%#X\n", pd);
    printf("키:%#X\n", key);
    printf("암호문:%#X\n", sec);
    printf("복호문:%#X\n", data);
    return 0;
}


실행 결과는 다음과 같습니다.

이처럼 비트 연산 ^연산을 이용하여 대칭형 암호화를 할 수 있어요.

평문:0x12345678
키:0x2345873A
암호문:0x3171D142
복호문:0x12345678

2. & mask를 이용한 이진수 출력

비트 연산 &mask는 원하는 부분의 값을 추출할 때 사용할 수 있어요.
이러한 특징을 이용하여 맨 앞의 비트부터 1인지 0인지 확인하여 출력하면 이진수를 출력할 수 있어요.
다음 코드는 & mask를 이용하여 정수를 2진수로 출력하는 예제 코드입니다.

#include 
int main()
{
    int num;
    printf("정수:");
    scanf_s("%d", &num);
    printf("%#X\n", num);
    
    unsigned int cnum = 0x80000000;//1000 0000 0000 0000 0000 0000 0000 0000
    int check = 0;
    int cnt = 0;
    while (cnum)
    {
        if (cnum & num)
        {
            printf("1");
            check = 1;
        }
        else
        {
            if (check == 1)
            {
                printf("0");
            }
        }
        cnt++;
        cnum = cnum / 2;
        if ((cnt % 4 == 0) && (check == 1))
        {
            printf(" ");
        }
    }
    return 0;
}

다음은 실행 결과예요.

정수:349
0x15D
1 0101 1101