독도 광고 모금 캠페인

티스토리 툴바

Base64 Encoding & Decoding in Flash AS3

Posted 2009/08/24 00:37 by 짱오리

C# 과 플래시가 연동되는 플젝을 진행하면서 Base64 Encoding & Decoding 방식을 사용하게 되었다. 그래서 이번 기회에 간략하게 Base64 에 대해서 정리해 보기로 하였다.^-^
( 깊이 들어가면 어렵기 때문에 간략한 정도로 어떤 것이다.. 라는 정도의 이해를  위한 정리이다. 참고로 as 파일은 하단에 설명되어 있다. )

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

백과 사전의 설명 역시 어렵게 느껴지는데 ^-^;; 결과적으로 해석하자면 64진법이라는 건데,
결국 Base64 Encoding & Decoding 이란 것은 64진법에 기초하여 어떤 공통된 규칙을 적용하여 바이너리 데이터를 스트링으로 바꾸고( 인코딩 ), 이를 다시 스트링에서 바이너리 데이터로바꾸어( 디코딩 ) 사용한다는게 아닐까 한다. 

Base64 인코딩 원리

우선 제목이 말하는 Base64의 의미가 무엇인지 살펴 보자.

베이스가 64라는 것은 모든 정보를 64진수로 표시한다는 것인데, 컴퓨터는 2진수를 사용하므로 64진수로 표시하기 위해서는
2^6 = 64 즉 6 비트 2진수 열이 필요하다.

그런데 대개 컴퓨터에서 가장 기본이 되는 정보 단위는 8 비트씩 엮어진 바이트이므로
6비트와 8비트가 각각 나누어 떨어질 수 있는 공배수의 최소값 (최소 공배수)를 구하면 24비트가 된다.

24비트는 8비트 바이트에서는 3바이트가 되고, 64진수로 나타내기 위한 6비트 단위로는 4 단위가 된다. (바이트라고 반복하기 말하면 혼동이 될 것 같아서 "단위"라는 말로 대치하였다.)

따라서 Base64의 인코딩 원리는 3바이트 단위마다 (즉 24비트 마다) 6비트씩 쪼개어서 6비트 짜리 문자 4개로 만드는 것이 되겠다.

이 때 6비트씩 쪼개진 단위를 A-Z a-z 0-9 + / (모두 64개 문자)로 각각 대응시키면 Base64 인코딩이 된다.

Base64 Encoding Decoding

Base64 Encoding/Decoding



그런데 입력되는 정보가 모두 3바이트씩 떨어진다는 보장이 없으므로 3바이트로 나누어떨어지지 않는 경우 = 문자로 채우기를 한다. 즉 Base64로 인코딩 된 데이타에서 = 가 보이면 그 것은 다시 원래의 정보로 되돌아 갈때 (디코딩 될때) 아무 것도 없는 것이라는 소리가 된다.
(Base64로 인코딩 정보의 끝에 최대 나올 수 있는 = 의 수는 2개가 되겠다. 즉 끝부분에 =가 없거나 1개가 있거나 2개가 있는 것이 모두 나올 수 있는 경우가 되겠다.)

디코딩은 A-Z a-z 0-9 +- 문자를 각각 6비트의 정보로 바꾸어서 4 단위 (6*4=24 비트) 마다 합쳐서 3바이트 (3*8=24 비트) 로 다시 복원시키면 된다


[ 출처 ] http://par.sarang.net/369
            Base64 인코딩 원리에 대해 굉장히 쉽게 설명이 되어 있어 스크랩하였다.


자 이제 Base64 Encoding & Decoding 이 어떤 것인지 알았으니 활용하는 것만 남았다. 아마도 필요한 것은 AS 파일 ^-^

Base64.as 파일을 구할 수 있는 곳

link1 :  http://dynamicflash.com/goodies/base64/
link2 : http://www.foxarc.com/blog/article/60.htm

[ 참고 ]
link1 에서 제공하는 as 파일은 변환시 대응하는 문자들( A-Z a-z 0-9 + /  모두 64개 문자 )을 하나의 긴 String type 으로  만들어 사용하고 있고, link2 에서는 각각을 하나의 string 로 하여 Array에 담아 사용하고 있다.
개인적으로 속도 테스트를 진행하여 보았는데, 내 경우는 link2가 조금더 encoding 하는 속도가 빨랐다. 아마도 Array을 사용하였기 때문에 그런게 아닌가 싶다.
단, link2의 파일은 ByteArray 에 대한 encoding / decoding 을 제공하고, link1은 String 및 좀더 다양한 method 를 제공한다.
따라서 작업에 따라 필요한 파일을 사용하는 것이 좋다.

나의 경우는 ByteArray에 대한 변환이 필요했으므로 link2 의 as 파일을 Vector 방식으로 변환하여 사용하였다. ( 아주 큰 차이는 아니지만 Vector 로 변경 후 약간의 속도를 더 높일 수 있었다. ^-^ ) 
필요하신 분들을 위해 파일을 첨부하였다 .


Tag : , , , ,

« PREV : 1 : 2 : 3 : 4 : 5 : ... 47 : NEXT »