베이스64
베이스64(Base64) 은2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환 하는 인코딩 방법 으로 컴퓨터 분야에서 쓰이는 베이스 64 란 8비트 바이너리 데이터(예를 들어 실행파일이나, ZIP파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 스트링으로 바꾸는 인코딩 방식을 가리키는 개념 이다.[1]
개요
2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환 하는 인코딩 방법이다. MIME에 의해 사용된는 방법으로, 4개의 7비트 아스키 문자로 표현되도록 데이터를 3 바이트씩 4개의 6비트 단위로 나누어 표현되고 메일에서 텍스트, 이미지, 오디오 파일을 보낼 때 이용하거나, SLM에서 AKAAUTH를 진행 하거나, IMS통신을 하는 경우 등 매우 다양한 곳에서 활용된는 코딩 으로 모든 플랫폼에서 안보이거나 깨지는 일이 생기지 않도록 공통으로 64개의 아스키 코드를 이용하여 2진 데이터를 변환하기 위해 베이스 64를 이용 하고, 베이스 64로 인코딩하면 크기가 33% 정도 커지게 된다. [2] 원래 Base 64를 글자 그대로 번역하여 보면 64진법이란 뜻이다. 특별히 64진법이 컴퓨터에서 흥미로운 것은, 64가 2의 제곱수(64 = 26)이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시가 되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다. 즉 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다.
특징
Base64라는 의미는 64진법이라는 의미 이다.화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문 인데, Base64는 전자 메일을 통한 이진 데이터 전송에 많이 쓰이고 있고, 대개 처음 62두개는 A-Z, a-z, 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이가 있다.[3]
Base64 Encoding 데이터를 Base64로 인코딩 하는 방법은 24비트 버퍼에 위쪽(MSB)부터 한 바이트씩 세 바이트를 집어 넣고, 남은 바이트가 3바이트 미만이라면, 버퍼의 남은 부분은 0으로 채워넣게 된다. 그리고, 버퍼의 위쪽부터 6비트씩 잘라 그 값을 읽어, 다음에 정렬된 64개 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"의 문자 중에서 읽은 값 번째 문자를 골라 출력한다. 만약 입력된 바이트가 하나라면 출력 중 두 개만이 사용되고 나머지 둘은 "="으로 패딩되며, 입력된 바이트가 둘이라면 출력 중 세 개 만이 사용되고 나머지 하나는 "="으로 패딩되게 된다. 이것은 원본으로 되돌릴 때 원본에는 없던 비트가 생기는 것을 방지하기 위해서 이고 입력 데이터가 끝날 때까지 반복하면 인코딩이 된다.[4]
- 2진 데이터를 ASCII 형태의 텍스트로 표현 가능 하다.
- Web 인증 중 기본인증에 사용 한다.
- 끝 부분의 padding(==) 식별 가능 하다.
- 64개의 문자 영문 대(26), 영문 소(26),숫자(10),+,- 를 사용 한다.
응용
ABC를 bade64로 인코딩
- 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
Base64 색인표
정확한 규격은 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
참고자료
- 제이, 〈What is base64?〉,《Bareum》, 2015-02-05
- Flow, 〈Base64 Encoding〉,《네이버》, 2011-02-28
- 민소네, 〈Base64 알고리즘〉,《깃허브》, 2014-03-20
같이 보기