728x90
여러 문제들을 풀면서 base64 인코딩이 많이 언급되어 정리하려 한다.
Base64
base64란 이진 데이터 (Binary data)를 ASCII 문자로 이루어진 텍스트로 변환시키는 인코딩이다.
위에 표를 보면 마지막 padding이라는 부분이 보일 것이다.
여기서 우리가 매번 문제를 풀 때 마지막에 =이 들어가면 base64로 유추할 수 있는 이유를 알 수 있다.
base64는 입력 데이터를 3바이트(24비트) 그룹으로 나누고 base64 문자에서 4개의 문자(각각 6비트)로 변환한다.(위 표를 참고)
그러나 경우에 따라 입력 데이터의 총 바이트 수가 3으로 균등하게 나누어지지 않을 수 있는데 이 경우 인코딩 프로세스는 여전히 유효한 bse64 출력을 생성해야 한다. 이를 위해 이용하는 것이 padding이다.
padding은 base64로 인코딩 된 텍스트의 길이가 항상 4의 배수가 되도록 하고 이는 디코더가 인코딩된 데이터의 끝을 인식하고
완전한 3바이트 그룹을 형성하지 않는 후행 비트를 적절하게 처리하는 데 도움이 된다.
- 입력 데이터가 3으로 나누어지지 않고 1바이트가 남아 있는 경우
- 최종 그룹에는 일반적인 4개(24비트) 대신 2개(12비트)만 포함된다.
- 마지막 두 문자가 패딩임을 나타내기 위해 끝에 두 개의 등호(==)가 추가된다.
- 입력 데이터가 3으로 나누어지지 않고 2바이트가 남아 있는 경우
- 최종 그룹에는 일반적인 4개(24비트) 대신 3개(18비트)만 포함된다.
- 마지막 문자가 패딩임을 나타내기 위해 끝에 하나의 등호(=)가 추가된다.
패딩 문자를 추가함으로써 디코더는 인코딩 된 데이터를 올바르게 해석하게 된다.
디코딩할 때 패딩 문자의 존재는 무시된다.
요약
인코딩 된 텍스트의 길이가 4의 배수가 되도록 하려면 base64 인코딩의 등호(=,패딩 문자)가 필요하다.
입력 크기가 3으로 균등하게 나누어지지 않는 경우에도 디코더가 인코딩된 데이터를 적절하게 처리하도록 도와준다.
728x90
'Web > 개념정리' 카테고리의 다른 글
[개념정리] XXE 란? (0) | 2023.08.11 |
---|---|
[개념정리] UNION (0) | 2023.07.10 |
[개념정리] NAT(Network Address Translation) (0) | 2023.06.16 |
[개념정리] Mysql (0) | 2023.05.02 |
[개념정리] 단방향 암호화 (0) | 2023.03.07 |