티스토리 뷰

Architecture/Security

[암호화] Base64

GOD동하 2020. 3. 19. 13:52

Base64 는 기본적인 인코딩 방식중 하나라고 볼 수 있다.

바이너리 데이터들을 인코딩할 때도 많이 쓰이는데
보통 메일에서 이미지나 실행파일들을 Base64 형태로 보내기도 한다.

여기서 64는 64진법을 사용한다는 뜻인데 위키백과 기준으로 아래와 같은 값들과 매칭된다
아래에서 0~61 까지 (A-Z, a-z, 0-9) 는 동일하고 그 뒤에 두개의 기호는 구현하는데에 따라 다를수 있음.

Base64 Table



Base64의 인코딩 원리는
1. 문자열을 bit 형태로 변형한다.
2. 6개의 bit씩 나눈다
3. 각각 위 테이블에 매칭되는 값으로 바꾼다

6개 bit로 자르는 이유는 6개의 비트면 조합이 64개이므로 (2^6)

GODD 를 Base64 로 인코딩 한다고 하면 아래와 같이 나온다.

1. 문자열을 bit 형태로 변형한다.
G            O           D           D
01000111 01001111 01000100 01000100

2. 6개의 bit씩 나눈다
010001 / 110100 / 111101 / 000100 / 010001 / 00
  17     /    52    /     61   /     4     /    17    /  나머지

 

3. 각각 위 테이블에 매칭되는 값으로 바꾼다
앞에 17, 52, 61, 4, 17에 해당하는 R, 0, 9, E, R 로 인코딩이 된다.

나머지 두 비트는 0으로 채워서 000000 => 0  => A 로 인코딩

따라서 R09ERA 로 인코딩 된다.

여기서 디코딩을 위해 패딩 개수를 알려주기 위해 패딩값 ==을 추가하여 최종적으로

R09ERA==  라는 값이 나온다.

(디코딩 할 때 ==를 보고 4 bit를 지우고 시작, = 한개면 2 bit 지우고 시작)

 

여기서 문제는 나머지 bit 처리인데
바이트가 8bit로 이루어져 있고 6bit 씩 잘라서 쓰므로 아래처럼 남게 된다.
1글자 = 1 byte = 8 bit => 6 bit 사용 / 2 bit 남음
2글자 = 2 byte = 16 bit => 12 bit 사용 / 4 bit 남음
3글자 = 3 byte = 24 bit => 24 bit 사용 
4글자 = 4 byte = 32 bit => 30 bit 사용 / 2bit 남음
...
이렇게 2 bit, 4 bit 씩 남는 경우가 있다. 
이 경우 6 bit로 맞추기 위해 padding 값을 0으로 채워주게 된다.

여기서 또 문제!
디코딩 할 때도 반대로 똑같이 처리를 해줘야 하는데
0으로 padding 할 경우 잘못된 값으로 디코딩 될 우려가 있어 
위처럼 2bit가 남으면 뒤에 == 추가, 4bit 가 남으면 뒤에 = 를 추가한다.
(Base64 인코딩 해보신 분들은 알겠지만 == 이런게 자주 붙어나옴)

 

 

 


[출처] 위키백과: https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464

'Architecture > Security' 카테고리의 다른 글

[블록체인] Proof of Stake (PoS) 란?  (0) 2021.06.23
[암호학] 공개키 암호 방식과 전자서명  (0) 2021.05.31
[암호화] 양방향/단방향 암호화  (0) 2019.12.02
OAUTH  (0) 2019.06.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함