◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
/* ※ 다음은 XOR연산의 특성입니다. 1004 -> 0000 0000 0000 0000 0000 0011 1110 1100 2101 -> 0000 0000 0000 0000 0000 1000 0011 0101 1004 ^ 2101 -> 0000 0000 0000 0000 0000 1011 1101 1001 -> 3033 ============================================================= 3033 -> 0000 0000 0000 0000 0000 1011 1101 1001 2101 -> 0000 0000 0000 0000 0000 1000 0011 0101 3033 ^ 2101 -> 0000 0000 0000 0000 0000 0011 1110 1100 -> 1004 ============================================================= 3033 -> 0000 0000 0000 0000 0000 1011 1101 1001 1004 -> 0000 0000 0000 0000 0000 0011 1110 1100 3033 ^ 1004 -> 0000 0000 0000 0000 0000 1000 0011 0101 -> 2101 즉, A ^ B = C가 나왔을 경우, C ^ A = B, C ^ B = A가 나오게 됩니다. XOR의 이와같은 특성을 이용하여 데이터의 암호화 및 복호화기법에 사용할 수 있습니다. 1. 사용자로부터 최대 1024크기의 문자열을 입력받으시오. 2. 암호화에 사용할 임의의 암호화키(문자열)를 만드시오. 예) "snake" 3. 암호화키를 이용하여 입력받은 문자열을 암호화한 후 화면에 출력하시오. 예) 입력받은 문자열이 "abcdefghijklmnopqrstuvwxyz"일 경우, abcdefghijklmnopqrstuvwxyz snakesnakesnakesnakesnakes 암호화키에 해당하는 "snake"를 입력받은 문자열 길이만큼 반복하며 수직관계에 해당하는 문자끼리 XOR연산을 하시오 : a^s, b^n, c^a, d^k, e^e, ....., x^k, y^e, z^s 4. 암호화된 문자열을 XOR연산의 특성을 이용하여 다시 복호화한 후 화면에 출력하시오. >>> 실행결과 암호화할 문자열을 입력하십시오. MBC아카데미디지털교육원 [암호화된 문자열] >,"裸렴仝餠?첆뗀禽Γ? [복호화된 문자열] MBC아카데미디지털교육원 */ #includeusing namespace std; #define MAX_CHAR 1024 void CryptoString(char* origin, char* crypto, char* key, int strLength); void main() { char origin[MAX_CHAR]; char encode[MAX_CHAR]; char decode[MAX_CHAR]; char cryptoKey[] = "snake"; char strLength = 0; cout << "암호화할 문자열을 입력하십시오." << endl; cin.getline(origin, _countof(origin)); //cin >> origin; strLength = strlen(origin); CryptoString(origin, encode, cryptoKey, strLength); cout << "[암호화된 문자열]" << endl; cout << encode << endl; CryptoString(encode, decode, cryptoKey, strLength); cout << "[복호화된 문자열]" << endl; cout << decode << endl; system("PAUSE"); } void CryptoString(char* origin, char* crypto, char* key, int strLength) { int keySize = strlen(key); int keyCount = 0; for(int i=0; i < strLength; i++) { crypto[i] = origin[i] ^ key[keyCount++]; if(keyCount == keySize) keyCount = 0; } crypto[strLength] = '\0'; }