README.md

Download
markdown 255 lines 6.2 KB
  1# ํŒŒ์ผ ์•”ํ˜ธํ™” ์˜ˆ์ œ (File Encryption Examples)
  2
  3XOR ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์•”ํ˜ธํ™” ๋„๊ตฌ ๊ตฌํ˜„ ์˜ˆ์ œ
  4
  5## ํŒŒ์ผ ๋ชฉ๋ก
  6
  7### 1. `simple_xor.c`
  8XOR ์•”ํ˜ธํ™”์˜ ๊ธฐ๋ณธ ์›๋ฆฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ๋ชจ
  9
 10**ํ•™์Šต ๋‚ด์šฉ:**
 11- XOR ์—ฐ์‚ฐ์˜ ๊ฐ€์—ญ์„ฑ (A ^ B ^ B = A)
 12- ๋น„ํŠธ ์—ฐ์‚ฐ ๊ธฐ์ดˆ
 13- 16์ง„์ˆ˜ ์ถœ๋ ฅ
 14- ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ„ด ์ถœ๋ ฅ
 15
 16**์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰:**
 17```bash
 18gcc -Wall -Wextra -std=c11 simple_xor.c -o simple_xor
 19./simple_xor
 20```
 21
 22**์ถœ๋ ฅ ์˜ˆ์‹œ:**
 23```
 24=== XOR ์•”ํ˜ธํ™” ๋ฐ๋ชจ ===
 25
 26์›๋ณธ ๋ฉ”์‹œ์ง€: Hello, World!
 27์›๋ณธ (hex):  48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
 28
 29์ฒซ ๊ธ€์ž 'H' XOR 'K' ์—ฐ์‚ฐ ๊ณผ์ •:
 30  'H' = 72 (0b01001000)
 31  'K' = 75 (0b01001011)
 32  XOR = 3 (0b00000011)
 33
 34์•”ํ˜ธํ™” ์™„๋ฃŒ!
 35๋ณตํ˜ธํ™” ๊ฒฐ๊ณผ: Hello, World!
 36```
 37
 38---
 39
 40### 2. `file_encrypt.c`
 41์‹ค์šฉ์ ์ธ ํŒŒ์ผ ์•”ํ˜ธํ™” ๋„๊ตฌ (๊ธฐ๋ณธ ๋ฒ„์ „)
 42
 43**ํ•™์Šต ๋‚ด์šฉ:**
 44- ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํŒŒ์ผ I/O (`fread`, `fwrite`)
 45- ๋ช…๋ น์ค„ ์ธ์ž ํŒŒ์‹ฑ (`argc`, `argv`)
 46- ๋ฒ„ํผ๋ง๋œ ํŒŒ์ผ ์ฒ˜๋ฆฌ (4KB ๋ฒ„ํผ)
 47- ์—๋Ÿฌ ์ฒ˜๋ฆฌ (`perror`)
 48- ํ‚ค ์ˆœํ™˜ ์ ์šฉ (modulo ์—ฐ์‚ฐ)
 49
 50**์ปดํŒŒ์ผ:**
 51```bash
 52gcc -Wall -Wextra -std=c11 file_encrypt.c -o file_encrypt
 53```
 54
 55**์‚ฌ์šฉ๋ฒ•:**
 56```bash
 57# ์•”ํ˜ธํ™”
 58./file_encrypt -e input.txt output.enc mypassword
 59
 60# ๋ณตํ˜ธํ™”
 61./file_encrypt -d output.enc decrypted.txt mypassword
 62```
 63
 64**ํŠน์ง•:**
 65- ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค
 66- XOR ํŠน์„ฑ์ƒ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ๋™์ผ ์—ฐ์‚ฐ
 67- ๋ชจ๋“  ํŒŒ์ผ ํƒ€์ž… ์ง€์› (ํ…์ŠคํŠธ, ๋ฐ”์ด๋„ˆ๋ฆฌ)
 68
 69---
 70
 71### 3. `file_encrypt_v2.c`
 72ํ–ฅ์ƒ๋œ ํŒŒ์ผ ์•”ํ˜ธํ™” ๋„๊ตฌ (ํ—ค๋” + ๊ฒ€์ฆ)
 73
 74**ํ•™์Šต ๋‚ด์šฉ:**
 75- ๊ตฌ์กฐ์ฒด ํ™œ์šฉ (`FileHeader`)
 76- ํŒŒ์ผ ๋งค์ง ๋„˜๋ฒ„ ๊ฒ€์ฆ
 77- ํ•ด์‹œ ํ•จ์ˆ˜ ๊ตฌํ˜„ (djb2 ์•Œ๊ณ ๋ฆฌ์ฆ˜)
 78- ํ‚ค ๊ฒ€์ฆ (๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ)
 79- ํŒŒ์ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ
 80- ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ
 81- ๊ณ ์ • ํฌ๊ธฐ ์ •์ˆ˜ ํƒ€์ž… (`uint8_t`, `uint32_t`, `uint64_t`)
 82
 83**์ปดํŒŒ์ผ:**
 84```bash
 85gcc -Wall -Wextra -std=c11 file_encrypt_v2.c -o file_encrypt_v2
 86```
 87
 88**์‚ฌ์šฉ๋ฒ•:**
 89```bash
 90# ์•”ํ˜ธํ™”
 91./file_encrypt_v2 encrypt secret.txt secret.enc mypassword
 92
 93# ํŒŒ์ผ ์ •๋ณด ํ™•์ธ
 94./file_encrypt_v2 info secret.enc
 95
 96# ๋ณตํ˜ธํ™”
 97./file_encrypt_v2 decrypt secret.enc decrypted.txt mypassword
 98```
 99
100**ํŒŒ์ผ ํ—ค๋” ๊ตฌ์กฐ:**
101```
102โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
103โ”‚  Magic Number (4 bytes): "XENC"         โ”‚
104โ”‚  Version (1 byte): 1                    โ”‚
105โ”‚  Key Hash (4 bytes): ๊ฒ€์ฆ์šฉ             โ”‚
106โ”‚  Original Size (8 bytes): ์›๋ณธ ํฌ๊ธฐ     โ”‚
107โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
108โ”‚         ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ                 โ”‚
109โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
110```
111
112**์ถœ๋ ฅ ์˜ˆ์‹œ:**
113```bash
114$ ./file_encrypt_v2 encrypt test.txt test.enc mypass
115์•”ํ˜ธํ™” ์ค‘...
116.
117์•”ํ˜ธํ™” ์™„๋ฃŒ: test.txt -> test.enc
118์›๋ณธ ํฌ๊ธฐ: 38 ๋ฐ”์ดํŠธ
119ํ‚ค ํ•ด์‹œ: 0x6CBFD0D9
120
121$ ./file_encrypt_v2 info test.enc
122=== ์•”ํ˜ธํ™” ํŒŒ์ผ ์ •๋ณด ===
123๋งค์ง ๋„˜๋ฒ„: XENC
124๋ฒ„์ „: 1
125ํ‚ค ํ•ด์‹œ: 0x6CBFD0D9
126์›๋ณธ ํฌ๊ธฐ: 38 ๋ฐ”์ดํŠธ
127ํŒŒ์ผ ํฌ๊ธฐ: 62 ๋ฐ”์ดํŠธ
128ํ—ค๋” ํฌ๊ธฐ: 24 ๋ฐ”์ดํŠธ
129์•”ํ˜ธํ™” ๋ฐ์ดํ„ฐ: 38 ๋ฐ”์ดํŠธ
130
131$ ./file_encrypt_v2 decrypt test.enc out.txt wrongpass
132์˜ค๋ฅ˜: ์ž˜๋ชป๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ
133๊ธฐ๋Œ€ ํ•ด์‹œ: 0x6CBFD0D9, ์ž…๋ ฅ ํ•ด์‹œ: 0x289A5245
134```
135
136---
137
138## ํ•ต์‹ฌ ๊ฐœ๋…
139
140### XOR ์•”ํ˜ธํ™” ์›๋ฆฌ
141```
142์›๋ฆฌ: A ^ K = C, C ^ K = A
143
144์˜ˆ์‹œ:
145  ์›๋ณธ: 'H' (72) = 0b01001000
146  ํ‚ค:   'K' (75) = 0b01001011
147  ์•”ํ˜ธ: XOR     = 0b00000011 (3)
148  ๋ณตํ˜ธ: 3 ^ 75  = 0b01001000 (72 = 'H')
149```
150
151### djb2 ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
152```c
153uint32_t hash = 5381;
154while ((c = *str++)) {
155    hash = hash * 33 + c;
156}
157```
158- ๋น ๋ฅด๊ณ  ํšจ๊ณผ์ ์ธ ๋ฌธ์ž์—ด ํ•ด์‹œ
159- ์ถฉ๋Œ ํ™•๋ฅ  ๋‚ฎ์Œ
160- ํ‚ค ๊ฒ€์ฆ์šฉ์œผ๋กœ ์ ํ•ฉ
161
162---
163
164## ๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ
165
166โš ๏ธ **๊ต์œก ๋ชฉ์  ์ „์šฉ**
167
168์ด ์˜ˆ์ œ๋Š” ํ•™์Šต ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ:
169
1701. **XOR ์•”ํ˜ธํ™”์˜ ์ทจ์•ฝ์ :**
171   - ํ‚ค ๋ฐ˜๋ณต ์‚ฌ์šฉ ์‹œ ํŒจํ„ด ๋…ธ์ถœ
172   - ์•Œ๋ ค์ง„ ํ‰๋ฌธ ๊ณต๊ฒฉ(Known-plaintext attack)์— ์ทจ์•ฝ
173   - ํ‚ค ๊ธธ์ด๊ฐ€ ์งง์œผ๋ฉด ๋ธŒ๋ฃจํŠธํฌ์Šค ๊ณต๊ฒฉ ๊ฐ€๋Šฅ
174
1752. **์‹ค์ œ ์‚ฌ์šฉ ๊ถŒ์žฅ์‚ฌํ•ญ:**
176   - AES-256 (๋Œ€์นญ ์•”ํ˜ธํ™”)
177   - RSA (๋น„๋Œ€์นญ ์•”ํ˜ธํ™”)
178   - OpenSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
179   - ํ‚ค ์ŠคํŠธ๋ ˆ์นญ (PBKDF2, bcrypt)
180   - ์†”ํŠธ(Salt) ์ถ”๊ฐ€
181
1823. **์ด ๊ตฌํ˜„์˜ ํ•œ๊ณ„:**
183   - ํ‚ค ์ŠคํŠธ๋ ˆ์นญ ์—†์Œ
184   - ์†”ํŠธ ๋ฏธ์‚ฌ์šฉ
185   - ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ(MAC) ์—†์Œ
186   - ์žฌ์ƒ ๊ณต๊ฒฉ ๋ฐฉ์ง€ ์—†์Œ
187
188---
189
190## ํ…Œ์ŠคํŠธ ์˜ˆ์ œ
191
192```bash
193# 1. ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ
194echo "Hello, World!" > test.txt
195./file_encrypt -e test.txt test.enc mykey
196./file_encrypt -d test.enc out.txt mykey
197diff test.txt out.txt  # ๋™์ผํ•ด์•ผ ํ•จ
198
199# 2. ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ํ…Œ์ŠคํŠธ
200./file_encrypt_v2 encrypt /bin/ls ls.enc strongpass
201./file_encrypt_v2 decrypt ls.enc ls.dec strongpass
202diff /bin/ls ls.dec  # ๋™์ผํ•ด์•ผ ํ•จ
203
204# 3. ์ž˜๋ชป๋œ ํ‚ค ํ…Œ์ŠคํŠธ
205./file_encrypt_v2 decrypt test.enc wrong.txt wrongkey
206# ์ถœ๋ ฅ: ์˜ค๋ฅ˜: ์ž˜๋ชป๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ
207
208# 4. ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ํ…Œ์ŠคํŠธ (10MB)
209dd if=/dev/urandom of=large.bin bs=1M count=10
210time ./file_encrypt_v2 encrypt large.bin large.enc mypass
211./file_encrypt_v2 info large.enc
212```
213
214---
215
216## ์ปดํŒŒ์ผ ์˜ต์…˜ ์„ค๋ช…
217
218```bash
219gcc -Wall -Wextra -std=c11 file.c -o program
220```
221
222- `-Wall`: ๊ธฐ๋ณธ ๊ฒฝ๊ณ  ํ™œ์„ฑํ™”
223- `-Wextra`: ์ถ”๊ฐ€ ๊ฒฝ๊ณ  ํ™œ์„ฑํ™”
224- `-std=c11`: C11 ํ‘œ์ค€ ์‚ฌ์šฉ
225- `-o program`: ์ถœ๋ ฅ ํŒŒ์ผ๋ช… ์ง€์ •
226
227---
228
229## ํ•™์Šต ์ฒดํฌ๋ฆฌ์ŠคํŠธ
230
231- [ ] XOR ์—ฐ์‚ฐ์˜ ๊ฐ€์—ญ์„ฑ ์ดํ•ด
232- [ ] ๋น„ํŠธ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ๋ฒ• (`^`, `&`, `|`, `~`, `<<`, `>>`)
233- [ ] ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํŒŒ์ผ I/O (`fread`, `fwrite`)
234- [ ] ๋ช…๋ น์ค„ ์ธ์ž ํŒŒ์‹ฑ (`argc`, `argv`)
235- [ ] ๊ตฌ์กฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ ํŒŒ์ผ ํ—ค๋” ์„ค๊ณ„
236- [ ] ํ•ด์‹œ ํ•จ์ˆ˜ ๊ตฌํ˜„ (djb2)
237- [ ] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ๊ฒ€์ฆ ๋กœ์ง
238- [ ] ๋ฒ„ํผ๋ง์„ ํ†ตํ•œ ํšจ์œจ์ ์ธ ํŒŒ์ผ ์ฒ˜๋ฆฌ
239
240---
241
242## ์ฐธ๊ณ  ์ž๋ฃŒ
243
244- [C11 Standard](https://en.cppreference.com/w/c/11)
245- [XOR Cipher - Wikipedia](https://en.wikipedia.org/wiki/XOR_cipher)
246- [djb2 Hash Function](http://www.cse.yorku.ca/~oz/hash.html)
247- [OpenSSL Documentation](https://www.openssl.org/docs/)
248
249---
250
251## ๊ด€๋ จ ํ•™์Šต ์ž๋ฃŒ
252
253- `/opt/projects/01_Personal/03_Study/content/ko/C_Programming/08_Project_File_Encryption.md`
254- `/opt/projects/01_Personal/03_Study/content/ko/C_Programming/14_Bit_Operations.md`