카테고리 없음
[Basic] Base64 그리고 Hex String
simongs
2020. 5. 9. 14:32
▣ 고민배경
암호화 알고리즘을 통해 나온 바이트(byte) 배열을 어떻게 Readable 한 Text 로 표현할 것인가?
▣ BASE64
1. Basic Concept
- 64개의 문자로 표현을 한다.
- 0…63까지 A-Z, a-z, 0-9, +, / 64개의 문자를 사용해서 표현한다.
- 별도의 변환표를 가지고 있다.
- 52개의 영문자 (대문자 26개, 소문자 26개)
- 10개의 숫자문자 (0~9)
- 나머지 2개는 정의에 따라 달라진다.
- 표준은 (+, /) 이다.
- 8비트 짜리를 6개로 쪼개면 000000(2) 6자리의 2진수가 나오게 되고 해당 6자리 2진수는 0부터 63까지의 값을 가지게 된다.
- 3바이트(24비트) 는 4개의 캐릭터 (24비트) 로 변환하게 된다.
- Sample(E1L -> RTFM)
- 01000101 00110001 01001100 -> E1L
- 010001 010011 000101 001100 -> RTFM
2. Padding
- 위의 설명은 모두 3바이트 배수일때만 깔끔하게 적용된다.
- 하지만 그 외에 케이스에서는 6bit로 자를 때 빈공간이 생기게 된다.
- 만약 4 바이트 를 Base64 인코딩을 한다고 가정해보자
- SIMS
- (4 Byte) 01010011 01001001 01001101 01010011
- (6Bit Split) 010100 110100 100101 001101 010100 11 <- 6개 비트씩 자르면 마지막 2개가 애매하게 남게 된다.
- (6Bit Split + bit padding) 010100 110100 100101 001101 010100 110000 <- 남은 공간을 0으로 채운다
- (6bit Split + bit padding + 캐릭터 패딩) 010100 110100 100101 001101 010100 110000 000000 000000
- 남은 2개의 캐릭터는 패딩 캐릭터인 "=" 로 채운다.
- U0lNUw==
▣ Hex String
- Hex는 16진수를 의미한다.
- 16진수는 4비트로 표현가능하며 0~F 까지의 표기가 가능하다.
- 0000 => 0
- 0001 => 1
- 1111 => F
- 2진수 -> 16진수는 4자리씩 끊어서 표현가능하다.
- 2진수 = 1011 0101 0010
- 10진수 = 2048 + 512 + 256 + 64 + 16 + 2 = 2898
- 16진수 = B 5 2