Base64 ์ธ์ฝ๋ฉ์ด๋?
Base64๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํ
์คํธ๋ก ํํํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ผ๋ก, ์์์ ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ๊ฐ๋ฅํ 64๊ฐ์ ASCII ๋ฌธ์๋ง์ผ๋ก ๋ํ๋
๋๋ค. ์ฌ์ฉํ๋ ๋ฌธ์๋ A-Z, a-z, 0-9์ +, /์
๋๋ค. HTML/CSS์ ์ด๋ฏธ์ง๋ฅผ ์ง์ ์ฝ์
ํ ๋(data URI), ์ด๋ฉ์ผ์ ๋ฐ์ด๋๋ฆฌ ์ฒจ๋ถ ํ์ผ์ ๋ณด๋ผ ๋(MIME), JSON ์น ํ ํฐ(JWT) ๋ฑ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๊ฐ ํ
์คํธ๋ง ํ์ฉ๋๋ ๊ฒฝ๋ก๋ฅผ ์์ ํ๊ฒ ํต๊ณผํด์ผ ํ๋ ๊ฑฐ์ ๋ชจ๋ ๊ณณ์์ ๋๋ฆฌ ์ฐ์
๋๋ค. ์ด ๋๊ตฌ๋ ์
๋ ฅํ ๋ชจ๋ ํ
์คํธ๋ฅผ ์ธ์ฝ๋ฉํฉ๋๋ค โ ๋จผ์ UTF-8 ๋ฐ์ดํธ๋ก ๋ณํํ ๋ค ์ธ์ฝ๋ฉํฉ๋๋ค.
์ธ์ฝ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ ๋ ฅ๋์ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ๋ถ์ฌ๋ฃ๊ณ ์คํํ์ธ์. ๊ณ์ฐ๊ธฐ๊ฐ ํ ์คํธ๋ฅผ UTF-8 ๋ฐ์ดํธ๋ก ๋ณํํ๊ณ ํ์ค Base64 ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ ๋ค, ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด๊ณผ ํจ๊ป ์ ๋ ฅ ๋ฐ์ดํธ ์, ์ถ๋ ฅ ๋ฌธ์ ์๋ฅผ ์๋ ค์ค๋๋ค.
๊ณต์ ์ค๋ช
์ธ์ฝ๋๋ ์
๋ ฅ ๋ฐ์ดํธ๋ฅผ 3๊ฐ์ฉ ์ฝ์ต๋๋ค. 3๋ฐ์ดํธ๋ 24๋นํธ๊ฐ ๋๊ณ , ์ด 24๋นํธ๋ 6๋นํธ์ง๋ฆฌ 4๊ฐ์ ์กฐ๊ฐ์ผ๋ก ์ ํํ ๋๋ฉ๋๋ค. ๊ฐ 6๋นํธ ๊ฐ(0~63)์ด ๋ฌธ์ ์งํฉ์ ์ธ๋ฑ์ค๊ฐ ๋์ด ์ถ๋ ฅ ๋ฌธ์ ํ๋๋ฅผ ๋ง๋ญ๋๋ค. ์
๋ ฅ ๊ธธ์ด๊ฐ 3์ ๋ฐฐ์๊ฐ ์๋ ๋๋ ๋ง์ง๋ง ๊ทธ๋ฃน์ ํจ๋ฉ์ ์ฑ์๋๋ค. ๋จ์ ๋ฐ์ดํธ๊ฐ 1๊ฐ๋ฉด ๋ฌธ์ 2๊ฐ์ ==๊ฐ, 2๊ฐ๋ฉด ๋ฌธ์ 3๊ฐ์ = ํ๋๊ฐ ๋ถ์ต๋๋ค. ๋ฐ๋ผ์ ์ถ๋ ฅ ๊ธธ์ด๋ ํญ์ 4 ร ceil(n/3)์
๋๋ค.
$$\text{Base64} = \operatorname{encode}_{64}\!\left(\text{Text}\right), \qquad L_{out} = 4 \left\lceil \frac{L_{in}}{3} \right\rceil$$
์์ ๋ก ๋ณด๊ธฐ
ํ
์คํธ Man์ ์ธ์ฝ๋ฉํด ๋ด
์๋ค. ASCII ๋ฐ์ดํธ๋ 77, 97, 110 โ ์ด์ง์๋ก 01001101 01100001 01101110์
๋๋ค. 6๋นํธ์ฉ ๋ฌถ์ผ๋ฉด \(010011 = 19 \to T\), \(010110 = 22 \to W\), \(000101 = 5 \to F\), \(101110 = 46 \to u\)๊ฐ ๋ฉ๋๋ค. ๊ฒฐ๊ณผ๋ TWFu โ ์
๋ ฅ 3๋ฐ์ดํธ, ์ถ๋ ฅ 4๋ฌธ์์ด๋ฉฐ ํจ๋ฉ์ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ถ๋ ฅ ๋์ = ๊ธฐํธ๊ฐ ๋ถ๋ ์ด์ ๋? ์ ๋ ฅ์ด 3๋ฐ์ดํธ์ ๋ฐฐ์๊ฐ ์๋ ๋ ๋ง์ง๋ง ๊ทธ๋ฃน์ ์ฑ์ฐ๋ ํจ๋ฉ์ ๋๋ค. ๋๋ถ์ ์ถ๋ ฅ ๊ธธ์ด๋ ํญ์ 4์ ๋ฐฐ์๊ฐ ๋ฉ๋๋ค.
Base64๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋์? ์๋๋๋ค. Base64๋ ์ธ์ฝ๋ฉ์ผ ๋ฟ ์ํธํ๊ฐ ์๋๋๋ค โ ๋๊ตฌ๋ ๋์ฝ๋ฉํ ์ ์์ต๋๋ค. ๋จ์ง ๋ฐ์ด๋๋ฆฌ๋ฅผ ํ ์คํธ๋ก ์์ ํ๊ฒ ์ ์กํ ์ ์๊ฒ ํด์ค ๋ฟ์ ๋๋ค.
์ถ๋ ฅ์ด ์ ๋ ฅ๋ณด๋ค ์ปค์ง๋ ์ด์ ๋? Base64๋ 3๋ฐ์ดํธ๋ง๋ค 4๋ฌธ์๋ก ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ฝ 33% ๋์ด๋ฉ๋๋ค.