패스워드 암호화하면서 BASE64 Encoding하면서 정리한다.
문자 인코딩(character encoding)
우선 인코딩(encoding)이란건 사람이 쓰눈 문자, 그림 등의 데이터를 컴퓨터가 이용할 수 있는 신호(0, 1)로
바꾸는 것이다. 대표적인 것이 아스키코드(ASCII)이다.
● 초기 컴퓨터의 텍스트 표현 표준이다.
● 알파벳과 몇몇 특수문자들만 표현할 수 있다.
Base64
64진법이라는 뜻이다. 8bit binary 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII영역의 문자들로만 이루어진
문자열로 바꾸는 인코딩 방식이다.
● 세계 곳곳의 문자들을 담아내야하는 필요성이 생기면서 ISO-8859, 유니코드 등 다양한 문자 인코딩 방식들이
생겼지만 각각 커버할 수 있는 문자들이 다르고, 결국 문자 코드와 상관없이 표현하려면 ASCII로 변환
● 8비트 3개 → 6비트 4개로 나누어 표현한다. (2^6 = 64)
● base64를 구성하는 문자들 중에 url의 스펙 상 사용할 수 없는 문자들이 있다.
데이터를 base64로 변환하는 과정
→ 데이터가 딱 들어맞는 24비트만 있지 않다. 그럴 땐 padding을 이용한다.
→ 0으로 남는 자리를 채우고, 아예 bit가 없는 부분은 padding 문자 "="가 된다.
Base32
● 5비트씩으로 나타내는 문자 셋 표현
● base64 대비 장점
- 대소문자 구분하지 않는 파일시스템, DNS이름, 음성언어 등에서 사용될 때 유용하다.
- unix경로구분 기호('/')로 포함할 수 없어서 파일 이름으로 사용할 수 있다.
● base64 대비 단점
- 20% 더 많은 공간을 차지한다.
Base16(hex)
● 2개의 4비트 문자(2바이트)로 바꾼다.
● 장점
- 32, 64와 달리 padding이 필요없다.
- 16진수는 자주 쓰이므로 mapping 테이블 없이도 가독성이 조다.
● 단점
- 공간 효율성이 50%로 떨어진다.
Base62
● base64에서 특수문자를 빼고 A-Z, a-z, 0-9로만 구성되는 방식이다.
● 상황에 따라 특수문자를 치환해서 써야하는 이슈(대표적으로 url)에 대응할 수 있다.
Base58check
● base64에서 사람의 눈으로 읽었을 때 헷갈리는 문자들(o, O, I, l) 및 특수기호 2개(+, /)를 제거했다.
● 비트코인의 주소를 나타내기 위해 개발되었다.
● 타이핑 실수 등 유효하지 않은 주소일 때 체크할 수 있는 Four bytes(32bits) of SHA256-based
error checking code가 표함된다.
● 2의 n승이 아니므로 binary보다는 정수를 인코딩하기에 적합