인터넷이 정보 고속도로라면 이메일 경로는 협곡입니다. 아주 작은 카트 만 통과 할 수 있습니다.
이메일의 전송 시스템은 일반 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"로 변환됩니다.
- 155 -> 10011011
- 162 -> 10100010
- 233 -> 11101001
- 100110 -> 38
- 111010 -> 58
- 001011 -> 11
- 101001 -> 41
- 38 -> m
- 58 -> 6
- 11 -> L
- 41 -> p
이 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 | / |