인터넷이 정보 고속도로라면 이메일 경로는 협곡입니다. 아주 작은 카트 만 통과 할 수 있습니다.
이메일의 전송 시스템은 일반 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 | 와이 | |||
3 | 디 | 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 | 3 | |||
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 | / |