base64 - MoonGyeongHyeon/Keyword_Study GitHub Wiki

base64

๋‹ค์Œ์€ ์œ„ํ‚ค๋ฐฑ๊ณผ์˜ base64 ์ •์˜ ๋‚ด์šฉ์ด๋‹ค.

์ปดํ“จํ„ฐ ๋ถ„์•ผ์—์„œ ์“ฐ์ด๋Š” Base 64 (๋ฒ ์ด์Šค ์œก์‹ญ์‚ฌ)๋ž€ 8๋น„ํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ(์˜ˆ๋ฅผ ๋“ค์–ด ์‹คํ–‰ํŒŒ์ผ์ด๋‚˜, ZIPํŒŒ์ผ ๋“ฑ)๋ฅผ ๋ฌธ์ž ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ณตํ†ต ASCII ์˜์—ญ์˜ ๋ฌธ์ž๋“ค๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์ผ๋ จ์˜ ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐœ๋…์ด๋‹ค.
์›๋ž˜ Base 64๋ฅผ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ๋ณด๋ฉด 64์ง„๋ฒ•์ด๋ž€ ๋œป์ด๋‹ค. ํŠน๋ณ„ํžˆ 64์ง„๋ฒ•์ด ์ปดํ“จํ„ฐ์—์„œ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์€, 64๊ฐ€ 2์˜ ์ œ๊ณฑ์ˆ˜(64 = 26)์ด๋ฉฐ, 2์˜ ์ œ๊ณฑ์ˆ˜๋“ค์— ๊ธฐ๋ฐ˜ํ•œ ์ง„๋ฒ•๋“ค ์ค‘์—์„œ ํ™”๋ฉด์— ํ‘œ์‹œ๊ฐ€ ๋˜๋Š” ASCII ๋ฌธ์ž๋“ค์„ ์จ์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ง„๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰ ๋‹ค์Œ ์ œ๊ณฑ์ˆ˜์ธ 128์ง„๋ฒ•์—๋Š” 128๊ฐœ์˜ ๊ธฐํ˜ธ๊ฐ€ ํ•„์š”ํ•œ๋ฐ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ASCII ๋ฌธ์ž๋“ค์€ 128๊ฐœ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿฐ ์ด์œ  ๋•Œ๋ฌธ์— ์ด ์ธ์ฝ”๋”ฉ์€ ์ด๋ฉ”์ผ์„ ํ†ตํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ „์†ก ๋“ฑ์— ๋งŽ์ด ์“ฐ์ด๊ณ  ์žˆ๋‹ค. Base 64์—๋Š” ์–ด๋–ค ๋ฌธ์ž์™€ ๊ธฐํ˜ธ๋ฅผ ์“ฐ๋Š๋ƒ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋ณ€์ข…์ด ์žˆ์ง€๋งŒ, ์ž˜ ์•Œ๋ ค์ง„ ๊ฒƒ์€ ๋ชจ๋‘ ์ฒ˜์Œ 62๊ฐœ๋Š” ์•ŒํŒŒ๋ฒณ A-Z, a-z์™€ 0-9๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋งˆ์ง€๋ง‰ ๋‘ ๊ฐœ๋ฅผ ์–ด๋–ค ๊ธฐํ˜ธ๋ฅผ ์“ฐ๋Š๋ƒ์˜ ์ฐจ์ด๋งŒ ์žˆ๋‹ค.

[์œ„ํ‚ค๋ฐฑ๊ณผ]

์œ„์˜ ๋‚ด์šฉ๋งŒ ๊ฐ€์ง€๊ณ ๋Š” ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š๋Š”๋‹ค.

์šฐ์„ , base64๋Š” '๋ฌธ์ž์—ด์„ ๊ธฐ๋ณธ์ ์ธ 64๊ฐœ์˜ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.' ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค. ์—ฌ๊ธฐ์„œ ๊ธฐ๋ณธ์ ์ธ 64๊ฐœ์˜ ๋ฌธ์ž๋Š”

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

์ด๊ณ , ๋งˆ์ง€๋ง‰ '='๋Š” 'padding ๋ฌธ์ž'๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์œ„์˜ 64๊ฐœ์˜ ๋ฌธ์ž๋กœ ํ‘œํ˜„ํ•˜๋ ค๋ฉด 6๋น„ํŠธ(0-63๊นŒ์ง€ ์ด 64๊ฐœ: 2^6 = 64)๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํ“จํ„ฐ ๋ฐ์ดํ„ฐ๋‚˜ ASCII๋ฌธ์ž ๋“ฑ์€ 8๋น„ํŠธ๋กœ ๋ฌถ์—ฌ์žˆ๋‹ค. base64 ์ธ์ฝ”๋”ฉ์„ ์œ„ํ•ด ๋ฌธ์ž์—ด์„ 2์ง„ ๋ฐ์ดํ„ฐ 6๋น„ํŠธ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค. ๋ฌถ๋Š” ๊ณผ์ •์—์„œ ํ˜ผ๋ž€์ด ์˜ค์ง€ ์•Š๋„๋ก, 6๊ณผ 8์˜ lcm(์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜)์ธ 24๋น„ํŠธ์”ฉ ๋Š์–ด์„œ ๋ฌถ๋„๋ก ์ •ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋Š๊ณ  ๋ณด๋ฉด 8๋น„ํŠธ ๋‹จ์œ„์ผ ๋•Œ 3๋ฐ”์ดํŠธ์˜€๋˜ ๋ฌธ์ž์—ด์ด 6๋น„ํŠธ ๋‹จ์œ„์˜ '๊ธฐ๋ณธ์ ์ธ 64๊ฐœ์˜ ๋ฌธ์ž' 4๊ฐœ๋กœ ์น˜ํ™˜๋œ๋‹ค๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 'Man' ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ base64 ์ธ์ฝ”๋”ฉ ํ•˜๋ ค ํ•œ๋‹ค. ์ด๊ฑธ ASCII ์ฝ”๋“œ์™€ ์ด์ง„์ˆ˜ ๊ฐ’์œผ๋กœ ๋ฌถ์–ด๋ณด๊ณ  6๋น„ํŠธ๋กœ ๋‹ค์‹œ ๋ฌถ์–ด๋ณด๋„๋ก ํ•˜์ž.

๋ฌธ์ž์—ด M a n
ASCII 77 97 110
Binary 01001101 01100001 01101110

6๋น„ํŠธ ๋ฌถ์Œ

010011 010110 000101 101110
๋ช‡ ๋ฒˆ์งธ? 19 21 5 46
base64 T W F u

(์ฃผ์˜ํ•  ์ ์€ 000000์ด A๋กœ ๋ณ€ํ•œ๋‹ค.)

์œ„์™€ ๊ฐ™์ด ๋ฌธ์ž์—ด 'Man'์€ base64 ์ธ์ฝ”๋”ฉ ํ›„ 'TWFu'๋กœ ์น˜ํ™˜๋œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.

๋ฌธ์ž์—ด -> ASCII binary -> 6bit cut -> base64_encode

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ชจ๋“  ๋ฌธ์ž์—ด์ด 3๊ฐœ์”ฉ ๋‚จ๊น€์—†์ด ๋Š์–ด์ง€์ง„ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ padding์„ ํ•˜๋Š”๋ฐ, padding์˜ ๋œป ๊ทธ๋Œ€๋กœ '๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋„ฃ์€ ๊ตฐ๋”๋”๊ธฐ'๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ 3๊ฐœ์”ฉ ๋Š์–ด์ง€์ง€ ์•Š๊ณ  ๋นˆ์ž๋ฆฌ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์ธ์ฝ”๋”ฉ ํ›„ ํŒจ๋”ฉ ๋ฌธ์ž์ธ '='๊ฐ€ ๊ทธ ๋นˆ์ž๋ฆฌ๋งŒํผ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

์ฆ‰, Many ๋ผ๋ฉด

-> 77 97 110 121

-> 1001101 01100001 01101110 01111001

-> 010011 010110 000101 101110 011110 010000 (๋‚จ๋Š” ๋น„ํŠธ ๋’ค์— '0'์„ ์ฑ„์›Œ 6๋น„ํŠธ๋ฅผ ๋งŒ๋“ฌ)

-> TWFueQ ๊ฐ€ ๋˜๊ณ , ์ฒ˜์Œ์— Man y-- ์ด๋ฏ€๋กœ 2๊ฐœ์˜ ๋นˆ๊ณต๊ฐ„์ด ์žˆ์Œ์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ํŒจ๋”ฉ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€

-> TWFueQ== ๊ฐ€ base64 encoding์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์ด ๋œ๋‹ค.

์ด๋Ÿฐ ํŒจ๋”ฉ ๋ฌธ์ž๋ฅผ ๊ฐ€์ง€๋Š” ํŠน์ง•๋•Œ๋ฌธ์— ์ธํฌ๋ฆฝํŠธ๋œ ๋ฌธ์ž๋ฅผ ๋ณด๊ณ  ๋ฌธ์žฅ ๋งˆ์ง€๋ง‰์— = ๊ฐ€ ํ•œ๊ฐœ ๋˜๋Š” ๋‘๊ฐœ ์žˆ๋‹ค๋ฉด base64 ์ธ์ฝ”๋”ฉ ๋˜์–ด์žˆ๋Š” ๋ฌธ์ž๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฌผ๋ก  ์ธํฌ๋ฆฝํŠธ ์ „ ๋ฌธ์ž๊ฐ€ 3๊ฐœ์”ฉ ๋”ฑ ๋Š์–ด์ ธ ํŒจ๋”ฉ ๋ฌธ์ž๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธฐ๋ณธ์ ์ธ 64๊ฐœ์˜ ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์•”ํ˜ธ๋ฌธ์ด๋ผ๋ฉด ์–ด๋Š์ •๋„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.)