귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 개요 == base64는 바이너리 데이터를 ASCII 문자열로 인코딩하는 방식으로, 64개의 출력 문자(영문 대소문자 52개, 숫자 10개, 기호 2개)를 사용하여 데이터를 표현한다.<ref name="RFC4648">[https://datatracker.ietf.org/doc/html/rfc4648 RFC 4648 - The Base16, Base32, and Base64 Data Encodings]</ref> 주로 바이너리 데이터를 텍스트 기반 프로토콜(예: 이메일, HTTP 등)에서 안전하게 전송하기 위해 사용된다. base64는 '''암호화나 보안 기법이 아니다.''' 이는 단순히 데이터를 다른 형식으로 표현하는 인코딩 방식에 불과하며, 비밀번호 저장이나 민감한 데이터 보호 용도로 사용될 경우 심각한 보안 취약점을 초래할 수 있습니다. 비밀번호 저장에는 반드시 bcrypt, Argon2 등의 안전한 해싱 알고리즘을 사용해야 합니다.<ref name="security">[https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html Password Storage Cheat Sheet (OWASP)]</ref> == 역사 == base64 인코딩은 1987년에 발표된 MIME(Multipurpose Internet Mail Extensions) 규격의 일부로 처음 표준화되었다.<ref name="MIME">[https://datatracker.ietf.org/doc/html/rfc1341 RFC 1341 - MIME (Multipurpose Internet Mail Extensions)]</ref> 당시 이메일 시스템이 7비트 ASCII 문자만 지원하던 제약을 극복하기 위해, 바이너리 파일(예: 이미지, 실행 파일 등)을 텍스트로 변환하여 전송할 필요가 있었다. == 작동 원리 == base64는 다음과 같은 과정을 통해 데이터를 인코딩한다: # 원본 데이터의 각 바이트(8비트)를 연속된 비트 스트림으로 취급한다. # 이 비트 스트림을 6비트 단위로 분할한다(6비트는 0부터 63까지 64가지 값을 표현할 수 있음). # 각 6비트 값을 미리 정의된 64개 문자 중 하나에 매핑한다. === 인코딩 테이블 === {| class="wikitable" style="text-align: center;" |+ base64 인코딩 테이블 ! 값 !! 문자 !! 값 !! 문자 !! 값 !! 문자 !! 값 !! 문자 |- | 0 || A || 16 || Q || 32 || g || 48 || w |- | 1 || B || 17 || R || 33 || h || 49 || x |- | 2 || C || 18 || S || 34 || i || 50 || y |- | 3 || D || 19 || T || 35 || j || 51 || z |- | 4 || E || 20 || U || 36 || k || 52 || 0 |- | 5 || F || 21 || V || 37 || l || 53 || 1 |- | 6 || G || 22 || W || 38 || m || 54 || 2 |- | 7 || H || 23 || X || 39 || n || 55 || 3 |- | 8 || I || 24 || Y || 40 || o || 56 || 4 |- | 9 || J || 25 || Z || 41 || p || 57 || 5 |- | 10 || K || 26 || a || 42 || q || 58 || 6 |- | 11 || L || 27 || b || 43 || r || 59 || 7 |- | 12 || M || 28 || c || 44 || s || 60 || 8 |- | 13 || N || 29 || d || 45 || t || 61 || 9 |- | 14 || O || 30 || e || 46 || u || 62 || + |- | 15 || P || 31 || f || 47 || v || 63 || / |} === 패딩 === base64 인코딩 시, 입력 데이터의 길이가 3바이트의 배수가 아닐 경우 '=' 문자를 사용하여 인코딩된 문자열의 길이를 4의 배수로 맞춘다.<ref name="padding">[https://en.wikipedia.org/wiki/Base64#Output_padding Base64 - Output padding (Wikipedia)]</ref> == 활용 분야 == base64는 다양한 분야에서 활용된다: === 이메일 첨부 파일 === MIME 규격에서 바이너리 첨부 파일을 인코딩하는 데 사용된다.<ref name="MIME"/> === 웹 개발 === 데이터 URL 스키마를 이용해 이미지나 폰트 등을 HTML 내에 인라인으로 삽입할 때 사용된다. [https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs Data URLs(MDN Web Docs)] <syntaxhighlight lang="html"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."> </syntaxhighlight> === 웹 API === JSON 등 텍스트 기반 데이터 포맷에서 바이너리 데이터를 안전하게 전송하기 위해 사용된다.<ref name="api">[https://developer.mozilla.org/en-US/docs/Glossary/Base64 Base64 (MDN Web Docs)]</ref> === 인증 시스템 === Basic Authentication에서 사용자 이름과 비밀번호를 인코딩할 때 사용된다.<ref name="basic-auth">[https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication HTTP authentication (MDN Web Docs)]</ref> <syntaxhighlight lang="http"> Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== </syntaxhighlight> {{알림|Basic Authentication에서의 base64 인코딩은 단순 인코딩일 뿐이며, 암호화나 보안을 제공하지 않습니다. 따라서 HTTPS와 같은 보안 프로토콜 없이 사용하면 위험합니다.<ref name="security-basic">[https://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https Is BASIC-Auth secure if done over HTTPS?]</ref>}} == 관련 항목 == * [[MIME]] * [[바이너리 파일]] * [[ASCII]] * [[URL 인코딩]] * [[해시 함수]] == 각주 == <references/> == 외부 링크 == * [https://datatracker.ietf.org/doc/html/rfc4648 RFC 4648 - The Base16, Base32, and Base64 Data Encodings] * [https://www.base64encode.org/ Base64 Encode/Decode 온라인 도구] * [https://developer.mozilla.org/en-US/docs/Glossary/Base64 Base64 - MDN Web Docs] <!-- 분류 --> [[분류:인코딩]] [[분류:디코딩]] 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림) 이 문서에서 사용한 틀: 틀:알림 (편집)