Base64에 대한 실용 가이드: 비트, 패딩 및 유효성 검사

6비트 그룹을 통해 바이트를 추적하고, 출력 크기를 계산하고, 복구 가능한 형식 문제와 정식 Base64을 구별합니다.

Base64은 제한된 텍스트 알파벳을 사용하여 바이트를 표현합니다. 전송이 텍스트를 허용하지만 페이로드가 바이너리인 경우에 유용합니다. 작업은 되돌릴 수 있습니다. 올바른 디코더는 유효한 문자가 아닌 0과 값을 포함하여 원래 바이트를 복구합니다. 해당 바이트를 해석하는 방법을 선택하는 것은 별도의 단계입니다.

3바이트는 4자가 됩니다.

바이트는 8비트를 포함합니다. 3바이트는 24비트를 제공하며 이는 6개씩 4개의 그룹으로 균등하게 분할됩니다. 각 그룹은 64개의 알파벳 문자 중 하나를 선택합니다. 표준 알파벳에는 대문자, 소문자, 숫자, 더하기 및 슬래시가 포함됩니다. ASCII 텍스트의 경우 Man, 바이트는 4d 61 6e 16진수로 인코딩된 출력은 다음과 같습니다. TWFu.

Input bytes:  01001101 01100001 01101110
Six-bit sets: 010011 010110 000101 101110
Indexes:      19     22     5      46
Output:       T      W      F      u

패딩은 최종 그룹을 설명합니다.

1바이트가 남아 있으면 출력에는 두 개의 알파벳 문자와 두 개의 등호가 포함됩니다. 나머지 2바이트는 알파벳 문자 3개와 등호 1개를 생성합니다. 따라서 M 된다 TQ==, 동안 Ma 된다 TWE=. 패딩은 형식의 구조를 나타냅니다. 등호를 임의로 추가해도 누락된 데이터 문자를 복구할 수 없습니다. 정규 인코딩에서는 마지막 알파벳 문자의 사용하지 않는 비트도 0이어야 합니다.

에 대한 n 바이트를 입력하면 패딩을 포함한 출력 길이는 4 × ceil(n / 3) 자입니다. 따라서 1,024바이트 파일은 Data URI 접두사나 줄바꿈을 추가하기 전에 1,368자가 됩니다. Base64는 압축이 아니지만 별도의 전송 압축 계층을 사용하면 최종 전송 크기를 줄일 수 있습니다.

해석하기 전에 검증하세요

정의된 프로토콜에 대해 생산자를 테스트할 때 엄격 모드를 사용합니다. 알려진 소스가 ASCII 줄 바꿈을 삽입했거나 패딩을 생략했거나 데이터 URI 래퍼를 포함했다면 호환성 모드를 사용하세요. 기록된 조정 내용을 검토합니다. 예상치 못한 구두점, 혼합 알파벳 및 0이 아닌 사용되지 않은 비트는 자동 삭제가 아닌 조사가 필요합니다.

마지막으로 디코딩된 바이트를 검사합니다. 유효한 Base64에는 잘못된 UTF-8 시퀀스, 잘린 이미지 또는 불완전한 PDF이 포함될 수 있습니다. 성공적인 디코딩은 인코딩 계층만 증명합니다. 바이너리 결과를 바이트로 저장하고 적절한 파일 파서를 사용하여 구조를 확인하세요. 알파벳, 패딩 및 표준 비트 규칙은 다음과 같이 지정됩니다. RFC 4648.