베이스64
베이스64(Base64)는 2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환하는 인코딩 방법이다. 컴퓨터 분야에서 쓰이는 베이스64란 8비트 바이너리 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 스트링으로 바꾸는 인코딩 방식을 가리키는 개념이다.[1]
개요
2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환 하는 인코딩 방법이다. MIME에 의해 사용되는 방법으로, 4개의 7bit 아스키 문자로 표현되도록 데이터를 3바이트씩 4개의 6bit 단위로 나누어 표현되고 메일에서 텍스트, 이미지, 오디오 파일을 보낼 때 이용하거나, SLM에서 AKAAUTH를 진행하거나, IMS 통신을 하는 경우 등 매우 다양한 곳에서 활용되는 코딩으로 모든 플랫폼에서 안 보이거나 깨지는 일이 생기지 않도록 공통으로 64개의 아스키코드를 이용하여 2진 데이터를 변환하기 위해 베이스 64를 이용 하고, 베이스 64로 인코딩하면 크기가 33% 정도 커지게 된다. [2] 원래 Base 64를 글자 그대로 번역하여 보면 64진법이란 뜻이다. 특별히 64진법이 컴퓨터에서 흥미로운 것은, 64가 2의 제곱수(64 = 26)이며, 2의 제곱수들에 기반한 진법 중에서 화면에 표시가 되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다. 즉 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다.
특징
Base 64라는 의미는 64진법이라는 의미이다. 화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문인데, Base 64는 전자 메일을 통한 이진 데이터 전송에 많이 쓰이고 있고, 대개 처음 62두 개는 A-Z, a-z, 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이가 있다.[3] 인코딩(Encoding)
- 인코딩은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 말하고 동영상이나 이미지영역에서도 많이 사용되는 용어이다.
Base64 Encoding 데이터를 Base 64로 인코딩하는 방법은 24bit 버퍼에 위쪽(MSB)부터 한 바이트씩 세 바이트를 집어넣고, 남은 바이트가 3바이트 미만이라면, 버퍼의 남은 부분은 0으로 채워 넣게 된다. 그리고, 버퍼의 위쪽부터 6비트씩 잘라 그 값을 읽어, 다음에 정렬된 64개 "ABCDEFGHIJKLMNOPQRSTUVWXYZa+/"의 문자 중에서 읽은 값 번째 문자를 골라 출력한다. 만약 입력된 바이트가 하나라면 출력 중 두 개만이 사용되고 나머지 둘은 "="으로 패딩 되며, 입력된 바이트가 둘이라면 출력 중 세 개 많이 사용되고 나머지 하나는 "="으로 패딩 되게 된다. 이것은 원본으로 되돌릴 때 원본에는 없던 비트가 생기는 것을 방지하기 위해 서 이고 입력 데이터가 끝날 때까지 반복하면 인코딩이 된다.[4] Binary Data 를 Text로 바꾸는 인코딩(binary-to-text encoding schemes)의 하나로서 Binary Data를 Character set에 영향을 받지 않는 공통 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 Encoding이고, 베이스64를 글자 그대로 직역하면 64진법 이라는 뜻이다. 64진법은 컴퓨터에 특별한데 그 이유는 64가 2의 제곱수 64=2^6이며 2의 제곱수에 기반한 진법 중 화면에 표시되는 ASCII 문자들로 표시할 수 있는 가장 큰 진법이다. ASCII에는 제어문자가 다수 포함되어 있기 때문에 화면에 표시되는 ASCII 문자는 128개가 되지 않고, 핵심은 베이스64 인코딩은 Binary Data를 Text로 변경하는 인코딩이다. 변경하는 방식을 간략하게 설명하면 Binary Data를 6비트 씩 자른 뒤 6비트 에 해당하는 문자를 아래 베이스64 색인표에서 찾아 치환한다.
- 2진 데이터를 ASCII 형태의 텍스트로 표현 가능하다.
- Web 인증 중 기본인증에 사용한다.
- 끝부분의 padding(==) 식별 가능하다.
- 64개의 문자 영문 대(26), 영문 소(26), 숫자(10),+,- 를 사용한다.
- RFC 2152에서 정의된 ? Modified BASE 64라 불리는 시스템을 의미하고 이 data encoding scheme은 UTF-16을 SMTP와 같이 7bit를 사용하는 ASCII 문자로 변환하는 데 사용된다. 이는 MIME을 사용하는 BASE 64 encoding의 변화된 방식으로, Modified BASE 64 알파벳은 MIME BASE 64 알파벳으로 구성되어 있지만, ' = ' 패딩 기호는 사용하지 않는다. UTF-7은 메일 헤더로 구성되어 사용되며, ' = '기호는 quoted-printable encoding을 위한 이스케이프 문자로 사용된다. Modified BASE 64는 간단하게 유용한 비트를 포함하고 있는 마지막 BASE 64 숫자 뒤에 바로 패딩과 끝을 생략한다.
- RFC 4880에서 정의하고 있는 OPEN PGP는 ASCII Armor로 알려진 64진수 인코딩은 64진수는 MIME에서 정의하고 있는 BASE 64 encoding과 동일하며, 추가로 24bit CRC 체크섬을 포함하고 있고, 체크섬은 encoding 이전의 입력 데이터로 계산한다. 체크섬은 같은 BASE 64 알고리즘으로 encoding 되며, 추가로 ' = ' 기호를 구분자로 사용하여 인코딩된 출력 데이터에 추가된다.
- RFC 3548(BASE 16, BASE 32, BASE 64 Data Encodings)은 BASE64encodings 에 관한 RFC 1,421과 RFC 2045의 내용을 통일시키는 정보이고, 드물게 BASE 32와 BASE 16에 관한 내용도 사용하고 있다., 특별히 선언되어 있지 않은 한은, RFC 3548은 인코딩 알파벳 이외의 문자를 사용한 메시지 생성을 허용하지 않고 있으며, 디코더는 인코딩 알파벳 이외의 문자가 포함된 데이터를 거부해야 한다.
아스키 코드
- 아스키코드는 American Standard Code for Information Interchange;ASCII 의 약자를 딴 것으로 영문 알파벳을 사용하는 대표적인 문자 인코딩이고, 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다. 국제표준기구에 의해 개발되었고 미국 국립표준연구소에서 제정되었으며, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 이루어진 7비트 인코딩이다. 2의 7승이니까 128개의(33 + 95) 문자를 표현하고, 이 안에는 (., -, $, #) 등등 특수문자가 여러 가지 있다. 아스키 문자들은 연동 중에 클라이언트, 웹서버, 웹서버 애플리케이션, 데이터베이스 등 에러를 내뱉는 경우가 있다. 이를 해결하기 위해 가장 많이 사용되는 게 BASE 64 이다. 그냥 직역하면 64진법. 64개의 문자를 표현하는 것이다. 기본적으로 특수문자도 어느 정도 있지만 +나 / 정도이므로 각 영역에서 해석하는 데 문제가 없다.[5]
응용
ABC를 베이스64로 인코딩
- ABC를 ASCII의 10진수로 A(65) B(66) C(67)
- 10진수를 2진수로 변경하면 A = 01000001, B = 01000010, C = 01000011 즉 ABC = 010000010100001001000011이 된다.
- 수치 6비트로 자르면 010000 010100 001001 000011 이 된다.
- 이수치를 다시 10진수로 치환하면 16 20 9 3 이 된다.
- 비트64 table의 수치로 전환
- QUJD 와 같이 변환하고 결과 > ABC >> QUJD
Base 64 색인표
정확한 규격은 RFC 1421, RFC 2045에 정의되는데, 연속된 8비트 바이트를 인코딩하도록 정의되어 있으며, 인코딩된 결과물은 아래 표보다 4/3 정도 늘어나게 된다.
값 | 문자 | 값 | 문자 | 값 | 문자 | 값 | 문자 |
---|---|---|---|---|---|---|---|
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 | / |
각주
- ↑ 아라비안 왕자, 〈IT용어 Base64 란?〉,《티스토리》, 2012-06-21
- ↑ 제이, 〈What is base64?〉,《Bareum》, 2015-02-05
- ↑ 민소네, 〈Base64 알고리즘〉,《깃허브》, 2014-03-20
- ↑ 과일가게 개발자, 〈Base64 암호화, 복호화 방법〉,《티스토리》, 2014-09-08
- ↑ 박진홍, 〈BASE 64 ?〉,《미디움》, 2016-03-08
참고자료
- 제이, 〈What is base64?〉,《Bareum》, 2015-02-05
- Flow, 〈Base64 Encoding〉,《네이버》, 2011-02-28
- 민소네, 〈Base64 알고리즘〉,《깃허브》, 2014-03-20
- 과일가게 개발자, 〈Base64 암호화, 복호화 방법〉,《티스토리》, 2014-09-08
- 박진홍, 〈BASE 64 ?〉,《미디움》, 2016-03-08
- 〈http://a.to/19MnKVz〉, 《위키백과》
같이 보기