- Base 64 (베이스 육십사)란 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념
우선 암호화는 아니다.
암호화는 복호화가 가능한 상태가 유한적이어야 하나.
base64의 경우 단순히 이진데이터를 아스키형태로 변환하여
데이터 전송시 문자인식 오작동으로 인한 문제가 발생하지 않게끔
방지하는것이 목적이다.
주로 메일 전송시 데이터를 byte스트림형태로 변환할때 많이 사용한다.
- 방식
base64에서 64는 2의 6승을 의미한다.
ex
대문자 'M' 은 아스키코드값이 77이다.
'77'을 2진수로 변환하면 0100 1101 이며,
이를 6비트로 다시 쪼개면
010 011 01...
여기서 마지막뒤에 '01'은 다음문자계산시 사용된다.
010 011 은 10진수로 변환하면 19이며
base64 색인표에서 19는 T 이다.
그래서 위처럼 Man은 Base64에의해 TWFu 로 변환된다.
우선 암호화는 아니다.
암호화는 복호화가 가능한 상태가 유한적이어야 하나.
base64의 경우 단순히 이진데이터를 아스키형태로 변환하여
데이터 전송시 문자인식 오작동으로 인한 문제가 발생하지 않게끔
방지하는것이 목적이다.
주로 메일 전송시 데이터를 byte스트림형태로 변환할때 많이 사용한다.
- 방식
Text content | M | a | n | |||||||||||||||||||||
ASCII | 77 | 97 | 110 | |||||||||||||||||||||
Bit pattern | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 |
Index | 19 | 22 | 5 | 46 | ||||||||||||||||||||
Base64-Encoded | T | W | F | u |
그래서 8비트의 문자형태를 6비트 형태로 변환을 하고,
6비트로 계산된 문자열을 아스키코드형태가 아닌
base64의 색인표에 적힌 64가지 문자를 이용하여 변환한다.
ex
대문자 'M' 은 아스키코드값이 77이다.
'77'을 2진수로 변환하면 0100 1101 이며,
이를 6비트로 다시 쪼개면
010 011 01...
여기서 마지막뒤에 '01'은 다음문자계산시 사용된다.
010 011 은 10진수로 변환하면 19이며
base64 색인표에서 19는 T 이다.
그래서 위처럼 Man은 Base64에의해 TWFu 로 변환된다.
값 | 문자 | 값 | 문자 | 값 | 문자 | 값 | 문자 |
---|---|---|---|---|---|---|---|
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 | / |
패딩('=')
위처럼 문자가 3글자이면 6비트로 쪼갯을때 딱 떨어진다.
게산을 잠깐해보면, 24, 48 등 6,8의 최소공배수인 8*n*3일때만 딱 떨어진다.
그렇기 때문에, 위처럼 떨어지지 않을경우 패딩을 추가한다.
%3의 결과가 2일 경우는 '=' 1일때는 '=='을 붙여주면 된다.
인코딩 테스트
댓글
댓글 쓰기