안녕하세요. 언제나 휴일에 언휴예요.
이번 강의는 비트 연산을 이용한 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