본문으로 바로가기

BASE64 개념잡기

category IT이것저것 2017. 8. 24. 17:05
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.




BASE64 개념잡기

BASE64란 ?

BASE64는 8비트 바이너리 데이터(예를 들어 실행파일이나, ZIP파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 스트링으로 바꾸는 인코딩 방식을 가리키는 개념입니다. BASE64는 64진법이란 뜻입니다. 64는 2의 6승이며 2의 제곱스들에 기반한 진법들 중에서 화면에 표시가 되는 ASCII문자들을 써서 표현할 수 있는 가장 큰 진법입니다. 

 BASE64의 핵심은 바이너리 데이터를 스트링으로 변경하는 인코딩 방식이라고 할 수 있습니다. 그렇기 때문에 이메일을 통한 바이너리 데이터 전송 등에 많이 쓰이고 있습니다. BASE64에는 어떤 문자와 기호를 쓰느냐에 따라 여러 변종이 있지만, 잘 알려진 것은 모두 처음 62개는 알파벳 A-Z, a-z와 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있습니다.


- 2진 데이터를 ASCII 형태의 텍스트로 표현 가능

- 웹 인증 중 기본 인증에 사용

- 끝 부분의 Padding==으로 식별 가능

- 64개의 문자 사용(영문 대, 소문자, 숫자, + , /)

- 데이터를 6bit 단위로 표현


BASE64사용하는 이유

BASE64인코딩을 하게 되면 길이가 33%정도 늘어나게됩니다. 33% 늘어나는데도 왜 BASE64를 사용하는걸까.. 알아보았습니다.

1. ASCII는 7 bits Encoding인데 나머지 1bit를 처리하는 방식이 시스템 별로 상이하다. 

2. 일부 제어문자 (e.g. Line ending)의 경우 시스템 별로 다른 코드값을 갖는다

3. BASE64는 ASCII 중 제어문자와 일부 특수문자를 제외한 64개의 안전한 출력 문자만 사용합니다.

4. 특정 스트링을 암호화하여 서버에 전달했을 때에 #, @과 같은 기호들이 생겨 데이터 전송과 연동에 어려운 부분이 있기 때문에               BASE64를 이용하여 인코딩한 후 디코딩하여 원래의 텍스트로 변환하여 사용합니다.

5. BASE64는 HTML 또는 Email과 같이 문자를 위한 Media에 Binary Data를 포함해야 될 필요가 있을 때, 포함된 Binary Data가 시스템 독립적으로 동일하게 전송 또는 저장되는걸 보장하기 위해 사용합니다.


BASE64의 동작 원리

1. 문자열을 나눈다.

2. 나눈 문자열을 치환한다.

3. 남은 문자열을 패딩처리한다.(패딩처리를 할 수도있고 안할 수도 있다.)


1. ABC라는 문자열이 있으면 각 문자당 8bit를 할당하게 되고 총 24bit로 구성되있습니다.

이것을 6bit로 단위로 나눕니다.



2. 나눈 문자열을 BASE64 문자 셋으로 치환하게 되면 YWJj 인코딩된 값이 생성됩니다.

3. BASE64로 인코딩을 할 경우 끝에 =가 많이 붙어서 나오는데 왜 그러는지 아래 사진과 설명을 달았습니다.

일반적으로 문자는 1byte(8bit)로 되어 있고 BASE64는 6bit로 되어 있습니다. 인코딩하여 나누는 과정에서 혼란을 야기시키지 않기 위해 6과 8의 최소공배수 24bit씩 묶어서 처리합니다.

아래 예제에서 a를 입력했을 경우 24bit를 다 활용하지 못해 6bit씩 잘랐을 경우 YQ가 생성되고 나머지 16bit를 활용하기 위해 끝에 =를 채워서 BASE64로 인코딩한 스트링이 생성됩니다.



REFERENCE

http://huikyun.tistory.com/70

http://blog.naver.com/xxrcn11/20134225481

http://arabiannight.tistory.com/entry/IT%EC%9A%A9%EC%96%B4-Base64-%EB%9E%80

https://m.blog.naver.com/PostView.nhn?blogId=ljmsp83&logNo=30187800265&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

http://regularmotion.kr/base64/