본문 바로가기

Computer Science

[Encoding] Base64 정리

 회사 DB 에서 데이터를 받아올 일이 있었는데, 그게 Base64로 Encoding 되어 있었습니다.

 

Base64 encoding 은 사실 알게 모르게 자주 사용하고 있었는데, 제대로 정리해 본적이 없어서 이번 기회에 정리하기로 마음 먹었습니다.

 

● Base64?

[참고: https://blue-boy.tistory.com/227 ]

 

> Base64를 사용하는 가장 큰 이유는 "binary data를 인코딩해서 Text 기반 데이터로 다룰 수 있다" 라는 점 때문입니다. 

binary data 중 ASCII 코드에 포함되지 않는 Data가 있어 ASCII 로 Data를 전달하면 Data 손실이 발생할 수 있습니다. 아스키는 7bit Data 이고, binary data는 8비트를 모두 사용하기 때문이죠. (이유 : https://kkamagistory.tistory.com/982)

 

결론은 binary data를 텍스트 형태로 변환하는데 있어 ASCII 는 한계가 있었고 그 대안으로 Base64 인코딩 방식을 적용하게 되었습니다.

 

Base64 인코딩 순서는 8bit 3개를 6비트 4개로 바꾸서 적절한 변형을 하는 방식입니다.

 

Base64 인코딩(출처 : https://ifuwanna.tistory.com/72)

 

● Base64 변환 표

> Base64 는 말 그대로 64진법으로 0~63 숫자에 알파벳 A-Z, a-z, 0-9 이 대응됩니다. (Base64도 변종이 있어, 마지막 2개 기호는 방식에 따라 달라질 수도 있다고 하네요)

Base64 변환 표

 

 

● Base 64 변환 코드 (Java)

[인코드]

DEFAULT_USER = "Myuser";
DEFAULT_PASS = "user!@3";
String auth = DEFAULT_USER +":"+DEFAULT_PASS;

byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.ISO_8859_1));

[디코드]

String encodedResult = "eiasldk";

byte[] decoded = Base64.getDecoder().decode(result);
반응형