티스토리 뷰

dev

Base64 이해와 Base62 비교

IT's me 2022. 12. 20. 01:44

Base64와 Base62 란 바이너리 데이터를 문자집합 각각 64개, 62개를 기준으로 하여 변경하는 인코딩/디코딩 방식을 이야기합니다.  

 

인코딩이라 하면 일반적으로 동영상 인코딩을 많이 들어보셨을 겁니다. MP4에서 mkv나 avi, mpg 등의 동영상 포맷으로 변환하는 과정을 얘기합니다. 여기서 얘기하는 인코딩도 맥락으로는 거의 같습니다.

 

단지 변환 대상이 동영상 소스에서 이진(바이너리) 데이터라는 것. 그리고 변환 결과가 아래의 Base64, Base62의 색인표에 맞게 바뀐다는 것이죠. 

 

이진 데이터라면 사실 상 영상 데이터든 사진이든 문자열이든 상관없이 그 모든 데이터라고 할 수 있겠죠. 그래서 Base64의 방식을 사용하는 곳에 대표적으로는 가장 큰 데이터 호환성이 필요한 이메일이 대표적입니다. 인터넷 데이터 전송과 데이터베이스 저장, 파일에 값을 저장 다양하게 사용됩니다. 

 

Base62는 주로 URL 단축에 많이 사용합니다. 

 

왜 이렇게 변경할까요?

 

1) 데이터 손실을 예방

 

이기종 간에 데이터를 전송하게 되면 제한된 환경과 시스템에서도 이해할 수 있게 변경해서 보내는 표준이 필요하게 됩니다. 그리고 대부분의 시스템(컴퓨터)는 데이터를 8비트의 바이트로 저장하는데 7bit의 아스키는 이런 8비트 데이터를 처리하기에 적합하지 않습니다. 

 

두줄로 보낼때가 손실되는 대표적인 예입니다.

 

Hello
Wolrd!

 

이 텍스트 데이터를 아스키코드로 보면 

 

72 101 108 108 111 10 119 111 114 108 100 33

 

 

여기서 바이트 10이 줄바꿈인데 손실될 수 있습니다. 

 

이걸 Base64로 인코딩하게 되면 다음과 같습니다. 

 

SGVsbG8sCndvcmxkIQ==

 

이 Base64를 다시 아스키로 보면

 

83 71 86 115 98 71 56 115 67 110 100 118 99 109 120 107 73 61 61

 

로 처리할 수 있습니다.

 

 

2) 특수문자를 없애기 위해서

 

웹 영역에서 특히 바이너리 데이터를 문자 데이터로 표현하는 경우가 많은데요. HTML 내에 포함되는 이미지 데이터가 대표적입니다. 

 

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
        9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

이런식으로 표현되는 img 태그를 볼 수도 있고 서버에서 이미지 데이터를 base64 형태로 받아와서 img 태그에 삽입하여 보여주는 패턴은 생소하지 않은 경우입니다. 

 

url 표현에 있어서도 마찬가지입니다.

 

url에서 특정 파라미터의 경우에 아예 사용할수 없는 것들이 있는데 이때에는 base64 url safe 버전이나 base62를 사용하면 됩니다.


Base64 색인표

문자 문자 문자 문자
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 /

 

여기서 62번째인 +와 63번째인 / 기호를 각각 -(minus)와 _ (underline) 으로 바꾸게 되면 Base 64의 URL and Filename safe 버전이 됩니다. 그러니까 Base64를 이용해도 +와 /를 -,_로 치환하게 되면 URL이나 파일명으로도 사용할 수 있게 된다는 뜻이죠. 

 

Base 64 URL and Filename safe

 

URL과 파일명으로 사용해지기 적합해진다는 뜻입니다. 

 

Base62란 여기서 62번째, 63번째 기호인 +와 /를 뺀 62진수의 표현 방법이라고 생각하면 됩니다. 특수문자 자체가 없어지기 때문에 개인적으로 선호하는 방법입니다. 

 

또, 마찬가지로 32진수와 16진수 표현방법인 base32와 base16(hex)이 있는데요. 표현하는 방법은 같다고 생각하면 되는데 정보 표현 방식의 제한 때문에 효율이 낮고 사용할 필요가 별로 없을 것 같습니다. 

 

Base 32 색인표

 

Base 16 색인표

해당 내용은 RFC 4648에 상세하게 표현되어있으니 참고해봐도 좋을 것 같습니다. 

 

tools.ietf.org/html/rfc4648

 

RFC 4648 - The Base16, Base32, and Base64 Data Encodings

[Docs] [txt|pdf] [draft-josefsson...] [Tracker] [Diff1] [Diff2] [Errata] PROPOSED STANDARD Errata Exist Network Working Group S. Josefsson Request for Comments: 4648 SJD Obsoletes: 3548 October 2006 Category: Standards Track The Base16, Base32, and Base64

tools.ietf.org

 

*추가 Base85(아스키85, Z85) 색인표 ( rfc.zeromq.org/spec/32/ )

 0 -  9:  0 1 2 3 4 5 6 7 8 9
10 - 19:  a b c d e f g h i j
20 - 29:  k l m n o p q r s t
30 - 39:  u v w x y z A B C D
40 - 49:  E F G H I J K L M N
50 - 59:  O P Q R S T U V W X
60 - 69:  Y Z . - : + = ^ ! /
70 - 79:  * ? & < > ( ) [ ] {
80 - 84:  } @ % $ #

 

 


댓글
최근에 올라온 글
최근에 달린 댓글