Base64 인코딩이란?
Base 64란 이진 데이터를(Binary Data) 64개의 아스키코드 문자(char)로만 이루어진 텍스트로 표시하는 진법입니다.
아래 표를 보면 Padding 포함 64개로 이루어져 있습니다.
예시는 아래와 같습니다.
Man이란 단어를 Bit로 8개씩 3단어 총 24Bit로 나열한 다음 이를 6Bit로 나눠서 이를 치환한 결과입니다.
이러한 방식으로 인코딩을 하는것을 Base64 인코딩이라고 합니다.
Man은 총 24Bit로 Base64에서 나누는 6Bit와 나눠지는 숫자였습니다.
만약 Ma의 16Bit처럼 6으로 나눠지지 않는 경우는 아래와 같습니다.
이때 바로 Padding이 사용되어 빈칸을 매웁니다.
Base64 사용하는 이유는?
예시로 사용한 Ma 같은경우 16비트에서 24비트로 오히려 크기가 증가하는데 왜 굳이 사용하는 걸까요?
바로 호환성과 안정성을 위함입니다.
Base64 인코딩을 사용하면 바이너리 데이터의 손실을 막아 데이터 전송시 안정성을 높이고, 각 운영체제와 호환성 걱정없이 데이터가 전달됩니다.
예를 들어 아스키 코드인 경우 7bits 인코딩이기에 나머지 1bit를 처리하는 방식은 운영체제마다 상이합니다.
그렇기에 8bits로 인코딩을 한 Base64는 해당 이슈로부터 비교적 자유롭습니다.
또한 일부 제어 문자의 경우(Line ending) 운영체제마다 다른 코드값을 가집니다. 이러한 문제 또한 해결됩니다.
Base64 사용법
자바 경우 아래와 같습니다.
1. 인코딩
String str = "test string";
byte[] base64Encoding = Base64.getEncoder().encode(str.getBytes(StandardCharsets.ISO_8859_1));
StringBuilder encode = new StringBuilder();
for(byte b : base64Encoding){
encode.append((char) b);
}
System.out.println(encode);
2. 디코딩
StringBuilder decode = new StringBuilder();
byte[] base64Decoding = Base64.getDecoder().decode(base64Encoding); // 위 인코딩 예제에서 가져온 base64Endcoding 값
for(byte b : base64Decoding){
decode.append((char) b);
}
System.out.println(decode);
3. 실행 결과
'개발잡담 > DB' 카테고리의 다른 글
MySQL 명령어 사용법 - 기본 2 (0) | 2024.01.16 |
---|---|
MySQL 명령어 사용법 - 기본 1 (0) | 2024.01.15 |
MongoDB ↔ Spring Boot 연동 (0) | 2023.11.07 |