본문 바로가기

Cryptology

base64 인코딩 알고리즘

base64 개념 :

64진수를 베이스로 하여 정보를 표현한다.(컴퓨터는 2진수 기반)

따라서 최소비트 (64=2^6) 6 비트를 가진다.

하지만 컴퓨터는 기본이 되는 정보를 1 바이트(8 비트)를 사용하여 표현한다.
(2=2^1  1 비트이지만... ASCII 코드 1바이트 사용)

그래서 6 과 8의 최소공배수인 24 비트(3 바이트)를 기준으로 하여 정보를 표현한다.

24비트는 6비트씩 4개가 나오므로 base64로 인코딩된 값의 길이는 4의 배수이다.


위의 그림과 같이 값을 24비트에 걸쳐서 표현한다.

앞에서부터 6비트씩 짤라서 4개의 문자를 만든다.

여기에 심볼을 대입한다.



base64 심볼 : (ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=)

'A' = 0 , 'B' = 1, …… '/' = 63,

' = '  이 심볼은 인코딩 하려는 데이터가 3바이트(24 비트) 로 나누어 떨어지지 않는 경우를 의미한다.

만약 'a' 를 입력했다면 1 바이트가 채워진다.

24 비트중에 앞에 8비트만 채워지므로

6비트로 나누어 보면 첫번째 6비트가 채워지므로 심볼하나가 나오고,

두번째 6비트중 앞에 2비트가 채워지므로 두번째 심볼이 나오지만

세번째 6비트부터는 입력된 데이터가 없다. 이럴때 세번째 심볼과 네번째 심볼은 ' = ' 이 된다.

따라서 최대 '='의 개수는 2개이다. (ex. **==)



base64 인코딩, 디코딩 예 :

인코딩(encoding) :

'A' 입력  -> 'A' 의 아스키값 : 65(Dec)

1 2 3 4 5 6 7 8        9 10 11 12 13 14 15 16        17 18 19 20 21 22 23 24
0 1 0 0 0 0 0 1  
                                            ↓

1 2 3 4 5 6        7 8 9 10 11 12        13 14 15 16 17 18        19 20 21 22 23 24
0 1 0 0 0 0        0 1

첫번째 6비트 값 = 16 = 'Q'
두번째 6비트 값 = 16 = 'Q'
세번째 6비트 값 = ' = '
네번째 6비트 값 = ' = '


디코딩(decoding) :

'QQ==' 입력

1 2 3 4 5 6        7 8 9 10 11 12        13 14 15 16 17 18        19 20 21 22 23 24
0 1 0 0 0 0        0 1 
                                            ↓

1 2 3 4 5 6 7 8        9 10 11 12 13 14 15 16        17 18 19 20 21 22 23 24
0 1 0 0 0 0 0 1 

첫번째 바이트 값 = 65 = 'A'



base64 인코딩, 디코딩 툴 : http://dakuo.tistory.com/entry/암호-인코딩encoding-디코딩decoding-툴SnDRT