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๊ฐ์ ๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง ์ํธ๋ฌธ์ด๋ผ๋ฉด ์ด๋์ ๋ ์์ธกํ ์ ์๋ค.)