본문 바로가기

Programming/Java & JSP & Spring

Base64 인코딩 (+ Base58)

인코딩이란?

인코딩(encoding)은 정보의 형태나 형식을 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 말한다.

Base64

Base64는 인코딩 방식 중에 하나로 문자 코드에 영향을 받지 않은 64개의 아스키 영역의 문자들로 이루어진 문자열로 변경하는 것을 말한다.

데이터가 여러 플랫폼에서 통신하면 플랫폼의 차이로 데이터가 깨질 수도 있다.

이를 방지하기 위해 아스키 문자열이라는 공통 캐릭터를 사용하여 안전하게 데이터를 송수신한다.

Base64의 본래 뜻은 64진법이라는 뜻이다. 8진수는 octet digits 또는 base8, 16진수는 hexdecimal 또는 base16이 된다.

사용 용도

Base64는 압축의 목적도 아니고 보안이라고 보기도 힘들다.

바이너리 데이터를 아스키코드 문자열로 치환하여 데이터 손실없이 송수신이 주 목적이라고 할 수 있다.

사용자가 읽을 수 없는 문자로 노출하고 싶을 때 사용되기도 한다.

사용 방법

자바에서는 라이브러리를 통해 간단히 Base64를 사용할 수 있다.

@Autowired private StandardPBEStringEncryptor stringEncryptor;

stringEncryptor.encrypt(value)

Base58 ?

Base58은 Base64를 보완하기 위해 나온 encoding기법이다.
Base64와 유사하지만 내부 알고리즘은 아주 다르다.

 

Base64의 경우 입력된 값을 6개씩의 bit로 잘라 지정된 table에 대응하는 character로 치환한다.
Base58은 입력된 값을 big number로 변경하여 58로 나누고 나머지를 지정된 table에 대응하는 character로 치환한다.

 

Base64의 경우 사용되는 table이 공식적으로 지정되어 이를 구현하는 어떤 어플리케이션에서도 동일한 결과를 리턴하지만,
Base58의 경우 공식적인 table이 없어서 application마다 다른 결과를 리턴한다.

Base58은 왜 등장했는가?

기존 Base64의 경우 query를 방해하는 = + 등의 문자가 들어가 있었다.

위의 단점을 제거하기 위해 Base58을 사용한다.

 

Base58의 사용법은 다음과 같다.

Base58.encode(value)