본문 바로가기
카테고리 없음

[Basic] Base64 그리고 Hex String

by simongs 2020. 5. 9.

▣ 고민배경

암호화 알고리즘을 통해 나온 바이트(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

▣ Reference

댓글