Base64 인코딩 작동 방법

인터넷이 정보 고속도로라면 이메일 경로는 협곡입니다. 아주 작은 카트 만 통과 할 수 있습니다.

이메일의 전송 시스템은 일반 ASCII 텍스트 용으로 만 설계되었습니다. 다른 언어 나 임의의 파일로 텍스트를 보내려고하는 것은 계곡을 통과하는 트럭을 타는 것과 같습니다.

큰 트럭은 계곡을 어떻게 지나가나요?

그러면 큰 계곡을 작은 계곡으로 어떻게 보냅니 까? 한쪽 끝을 조각으로 가져 가야하고, 골짜기를 통해 조각을 옮겨야하며, 다른 끝의 조각에서 트럭을 다시 만들어야합니다.

이메일을 통해 첨부 파일 을 보낼 때도 마찬가지입니다. 인코딩으로 알려진 프로세스에서 이진 데이터는 문제없이 전자 메일로 전송 될 수있는 ASCII 텍스트로 변환됩니다. 수신자 측에서는 데이터가 디코딩되고 원본 파일이 다시 작성됩니다.

임의의 데이터를 일반 ASCII 텍스트로 인코딩하는 한 가지 방법은 Base64입니다. 일반 텍스트 이외의 데이터를 전송하는 것은 MIME 표준 에서 사용되는 기술 중 하나입니다.

Base64를 구출하기 위해

Base64 인코딩은 각각 8 비트로 구성된 3 바이트를 취해 ASCII 표준에서 인쇄 가능한 4 개의 문자로 나타냅니다. 이것은 기본적으로 두 단계로 이루어집니다.

첫 번째 단계는 3 바이트를 4 개의 6 비트 수로 변환하는 것입니다. ASCII 표준의 각 문자는 7 비트로 구성됩니다. Base64는 6 비트 (2 ^ 6 = 64 문자에 해당) 만 사용하여 인코딩 된 데이터가 인쇄 가능하고 사람이 읽을 수 있는지 확인합니다. ASCII로 사용할 수있는 특수 문자는 사용되지 않습니다.

64 자 (따라서 Base64라는 이름)는 '+'및 '/'뿐만 아니라 10 자리, 26 자의 소문자, 26 자의 대문자입니다.

예를 들어, 3 바이트가 155, 162 및 233 인 경우, 대응하는 (및 무서운) 비트 스트림은 100110111010001011101001이고, 차례로 6- 비트 값 38, 58, 11 및 41에 대응한다.

이 숫자는 Base64 인코딩 테이블을 사용하여 두 번째 단계에서 ASCII 문자로 변환됩니다. 예제의 6 비트 값은 ASCII 시퀀스 "m6Lp"로 변환됩니다.

이 2 단계 프로세스는 인코딩 된 전체 바이트 시퀀스에 적용됩니다. 인코딩 된 데이터가 제대로 인쇄되고 메일 서버의 줄 길이 제한을 초과하지 않도록 줄 바꿈 문자가 삽입되어 줄 길이를 76 자 미만으로 유지합니다. 개행 문자는 다른 모든 데이터처럼 인코딩됩니다.

최종 게임 해결

인코딩 프로세스가 끝나면 문제가 발생할 수 있습니다. 바이트 단위의 원본 데이터 크기가 3의 배수이면 모든 것이 올바르게 작동합니다. 그렇지 않은 경우 1 ~ 2 개의 8 비트 바이트로 끝날 수 있습니다. 적절한 인코딩을 위해서는 정확히 3 바이트가 필요합니다.

해결책은 '0'값을 가진 충분한 바이트를 추가하여 3 바이트 그룹을 만드는 것입니다. 한 개의 여분의 데이터 바이트가있는 경우 두 개의 값이 추가됩니다. 하나는 여분의 두 바이트에 추가됩니다.

물론 이러한 인위적인 '0'은 아래의 인코딩 테이블을 사용하여 인코딩 할 수 없습니다. 문자는 65 번째 문자로 나타내야합니다.

Base64 패딩 문자는 '='입니다. 당연히 인코딩 된 데이터의 끝 부분에만 나타날 수 있습니다.

Base64 인코딩 테이블

0 에이 16 32 48 w
1 17 아르 자형 33 h 49 엑스
2 기음 18 에스 34 나는 50 개 와이
19 35 세 j 51
4 이자형 20 36 케이 52 0
5 에프 21 V 37 세 53 1
6 22 38 세 54 2
7 H 23 엑스 39 세 55
8 나는 24 와이 40 영형 56 4
9 일본 25 명 41 57 번 5
10 케이 26 세 에이 42 58 6
11 27 43 아르 자형 59 7
12 28 기음 44 에스 60 8
13 29 45 61 9
14 영형 30 이자형 46 62 +
15 명 31 에프 47 V 63 /