본문 바로가기

IT/용어

IT용어 Base64 란?

IT용어 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를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다.


[ 참고 ]위키백과 

http://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464

....


이것만 보곤 잘 이해되지 않고, 덧붙여 설명하자면...


우선 base64는 '문자열을 기본적인 64개의 문자로 변환해버린다' 라고 생각해 두면 편하겠다. (조금은 다르지만,,)

여기서 기본적인 64개의 문자는

"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= "

이고 마지막 '=' 는 추가로 padding문자라고 불린다.


이렇게 모든 문자열을 위의 64개 문자로 표현하려고 하면 6비트(0-63까지 총 64개 : 2^6 = 64)가 필요하다.

즉 2진수의 값을 64진수로 변환한다고 생각하면 된다.


그런데 일반적으로 컴퓨터 데이터나 ASCII문자등은 8비트(1바이트)씩 묶여있다. 

우리는 base64인코딩을 위해 문자열을 2진데이터를 6비트씩 묶어야 한다. 묶는 과정에서 혼란이 오지 않도록, 

6과 8의 lcm(최소공배수), 즉 24비트씩 끊어서 묶도록 정한것이다. 


이렇게 끊고보면 8비트단위일때 3바이트였던 문자열이 6비트단위의 '기본적인 64개의 문자 ' 4개로 치환된다는 걸 볼 수 있다.

예를들어보면, (위키피디아 example)

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    ->  01001101  01100001  01101110  01111001  

 -> 010011     010110    000101    101110    011110     010000  (남는비트 뒤에 '0'을 채워 6비트 만듬)

   -> TWFueQ   가 되고, 처음에 Man  y--  이므로 2개의 빈공간이 있음을 알려주기위해 패딩문자를 추가

   -> TWFueQ==   가 base64 encoding의 최종 결과물이된다. 


이런 패딩문자를 가지는 특징때문에 인크립트된 문자를 보고 문장 마지막에 =  가 한개 또는 두개있다면 BASE64 인코드되있는 문자라고 생각 할 수 있다.(물론 인크립트 전 문자가 3개씩 딱끊어져 패딩문자가 없을 수 있지만, 기본적인 64개의 문자로만 이루어진 암호문이라면 어느정도 예측 할 수 있다.)


이로써 base64의 원리는 모두 파헤쳤다. ㅋ;

아, base64 인코딩이 초기 문자보다 데이터의 크기가 더 커진다는 단점이 있는것 같지만, 

위키의 설명처럼 웹상에서 공통적으로 사용할 수 있기때문에 많이쓰인다.


출처 : http://alleysark.tistory.com/entry/base64







아라비안 왕자 :

결국 Base64란 8비트 데이터에서는 텍스트 문자가 아닌 다른 기호나 글씨들이 들어 갈 수 있기 때문에, 이런 것들을 모두 텍스트로 바꿔 주기 위한 방법 입니다. 

만약 사용자가 암호화 하는 자바코드를 만들어서 String을 암호화 시킨다고 가정해 봅니다. 관리를 위해서는 그 암호화된 String을 서버에 전달해 주어야 됩니다. 하지만 암호화된 String에는 " %", "#", 등의 기호들이 생기기 때문에 서로 연동이 안되는 부분이 생기게 됩니다. 해석을 할 수 없게 되는 것이지요.

그렇기 때문에, "%", "#" 등의 기호들을 텍스트로 바꿔 전달해주고, 서버에서는 전달받은 암호화된 String을 원래 대로 복구시켜서 순수한 암호화 String을 저장 하고 관리 하게 됩니다.

예를 들면 이런 구조로 돌아가는데요, 웹상이나 여러 환경들에서 공통으로 사용하기 위한 데이터 규약 정도로 해석 하시면 되겠네요^^  







'IT > 용어' 카테고리의 다른 글

IT용어 펌웨어란?  (0) 2012.07.20
IT용어 SSL 이란?  (0) 2012.06.28
IT용어 Active Directory ; 액티브 디렉토리란?  (0) 2012.06.13
IT용어 서버와 DB의 차이점이 뭐예요?  (19) 2012.06.13
IT/용어 레거시(legacy) 란?  (0) 2012.05.31