게요

개인적으로 궁금하기도 하고 나중에 사용할 일이 있을 때 다시 보려고 글을 남기기로 했다.

본문

Base란 쉽게 말하면 진법을 의미한다. 그러니 Base 62는 62진법, Base 64는 64진법으로 보면 된다.
종종 하는 오해가 Base-n 인코딩이 암호화 알고리즘이라고 생각하는 것이다.
아마 JWT를 다루며 Base-n 인코딩을 사용하니 헷갈리는 포인트인 것 같다.
암호화 알고리즘이 아니라는 것은 JWT를 배우면서 토큰은 누구나 해석할 수 있으니 민감한 정보는 토큰에 넣어 반환하면 안된다는 말에서 유추할 수 있다.

종종 다른 서비스를 본석하고 싶어서 네트워크 탭을 열어보면 /bit.ly/가 포함되어있는 링크를 보게된다.
해당 서비스는 대표적인 링크 단축 서비스로 여기서 Base-n 알고리즘을 사용하여 긴 링크를 대체한다.
직관적으로 9999를 10진법으로 나타내면 4자리를 사용하지만 16진법을 사용하면 3자리를 사용해서 표현할 수 있다. 그만큼 사용할 수 있는 문자가 많아지기 때문이다.

Base64는 6비트 단위로 2⁶ = 64 → 모든 6비트 조합을 표현 가능 주로 이진 데이터 전송용 (대표적으로 이메일, JWT, 이미지 인코딩)위해 사용한다.
Base62는 6비트 단위 표현 불가능하다. 왜냐면 2⁶ = 64인데, 62개밖에 없으니까 “2개 경우의 수”가 비기 때문인데
그래서 보통 10진수 → 62진수 변환 방식으로 사용한다. 그러니 Base62는 주로 ID/숫자 단축용 (숫자를 더 짧게 표현)으로 사용한다.

위의 두 알고리즘은 1과 I, l, O와 0이 포함되어있다. 굉장히 비슷하게 생긴 문자들이다.
만약 이렇게 난독화된 값을 만들어 랜덤한 코드로 클라이언트에게 반환해야한다고 하면 좋지 못한 알고리즘이다. Base58은 위와 같이 헷갈리는 문자들을 제외한 문자들로 인코딩하는 알고리즘이다.

정리해보자면 다음의 표와 같다. | 상황 | 목적 | 추천 알고리즘 | 이유 / 특징 | | ——————— | ——————— | —————————- | —————————————– | | 숫자/ID를 짧게 표현 | 짧은 식별자, URL 단축, 예약 코드 | Base62 | 알파벳+숫자 → URL-safe, 길이 최소화 | | 사람이 입력하기 쉬운 키 | OTP, 시크릿 키, QR코드 | Base32 | 대소문자 구분 없음, 입력 오류 최소화 | | 바이너리 데이터를 안전하게 전송 | 이메일, JWT, 이미지 문자열화 | Base64 / URL-safe Base64 | 6비트 단위 → 모든 이진 데이터 표현 가능, URL/파일 안전 변형 가능 | | 디버깅/로깅용 | 해시 값, 색상 코드 | Base16 (Hex) | 사람이 읽기 편함, 표준화되어 있음 | | 사람이 헷갈리지 않도록 단축 | 짧은 URL, 식별자 | Base58 | Base62에서 혼동되는 문자 제거 (0, O, I, l) | | 보안/암호화와 결합 | 키, 토큰 전달 | Base64 + 암호화(AES, RSA 등) | Base64는 표현용, 암호화는 보안용 → 혼동 주의 |