Рефераты. Электронная почта как сервис глобальной сети. Протоколы передачи почты

Формат NVT-ASCII – стандартный формат почтовых сообщений.

Quoted-printable

Полезен в случае, если текст содержит небольшое количество восьмибитных символов.

Base64

Формат, в котором три байта данных упакованы в четыре шестибитных значения.

8bit

Содержит текст, в котором не все символы принадлежат стандартному набору ASCII (то есть в некоторых установлен восьмой бит).

Binary

Восьмибитные данные без символов окончания строки.


По умолчанию формат почтовых сообщений удовлетворяет кодовому набору NVT-ASCII. 8-битные агенты МТА сейчас практически отсутствуют, но как только они получат широкое распространение, вероятно, передача бинарной и текстовой информации в 8-битной кодировке возрастет. В настоящий момент для передачи 8-битной информации по 7-битным каналам Internet лучше всего использовать кодировки quoted-printable или base64.


2.2.3. Способы кодирования MIME.


Для кодирования небольшого количества 8-битных данных в 7-битный формат NVT ASCII лучше всего подходит схема quoted printable. 8-битный символ в этой схеме представляется в виде последовательности из трех символов. Последовательность всегда начинается со знака “равно” (=). Сразу за знаком “равно” следует двузначное шестнадцатиричное число, представляющее код ASCII кодируемого символа. Рассмотрим закодированную quoted printable последовательность JAMSA PRESS. Хоть она и не содержит 8-битных символов, зато позволяет хорошо проиллюстрировать принцип кодирования. Закодированное сочетание JAMSA PRESS выглядит так:


=4A=41=4D=53=41=20=50=52=45=53=53


Другими словами, буква J имеет шестнадцатиричный код ASCII 0x4A, буква А – 0х41 и т.д. Схема quoted printable передает ASCII код для каждого символа последовательности. То есть для знака А (ASCII 0x4A) передается код знака “равно” (ASCII 0x3D), код цифры 4 (ASCII 0x34) и код знака А (0х41). Данную схему довольно удобно использовать, но она утраивает общее количество информации в сообщении. Таким образом, область применения quoted printable – сообщение с небольшим количеством символов, в которых установлен старший (восьмой) бит. Основная часть сообщения должна состоять обычных семибитных символов.

В отличие от quoted printable, кодирование Base-64 увеличивает размер сообщения всего лишь на одну треть. Каждая последовательность из трех байтов (24 бита) превращается в четыре шестибитовых (тоже 24 бита). Шестибитные символы соответствуют формату NVT ASCII и приведены в табл. 6.

Таблица 6

Таблица кодировки Base-64

6 бит

ASCII

6 бит

ASCII

6 бит

ASCII

6 бит

ASCII

0

A

16

Q

32

g

48

w

1

B

17

R

33

h

49

x

2

C

18

S

34

i

50

y

3

D

19

T

35

j

51

z

4

E

20

U

36

k

52

0

5

F

21

V

37

l

53

1

6

G

22

W

38

m

54

2

7

H

23

X

39

n

55

3

8

I

24

Y

40

o

56

4

9

J

25

Z

41

p

57

5

10

K

26

a

42

q

58

6

11

L

27

b

43

r

59

7

12

M

28

c

44

s

60

8

13

N

29

d

45

t

61

9

14

O

30

e

46

u

62

+

15

P

31

f

47

v

63

/


Если количество байтов (символов) в сообщении не кратно трем, используются дополняющие символы “равно”. Например, слово KEN в формате Base-64 выглядит как “S0VO” (дополнительных символов не требуется). Слово COPE в формате Base-64 выглядит как “Q09QRQ==” (требуются два дополнительных символа-нуля). Слово JAMSA в формате Base-64 выглядит как “SkFNU0E=” (требуется один дополнительный символ-ноль).



2.2.4. Реализации метода Base-64.


Далее рассмотрен процесс кодирования слова KEN методом Base-64. Описания участвующих в процессе переменных:

BYTE cTemp, cTempHigh, cTempLow;

BYTE cFirst6Bits, cSecond6Bits;

BYTE cThird6Bits, cFourth6Bits;

BYTE cFirstLetter = ‘K’;

BYTE cSecondLetter = ‘E’;

BYTE cThirdLetter = ‘N’;

Кодирование данных по методу Base-64

Операторы языка C/C++, реализующие способ кодирования Base-64:

cFirst5Bits = cFirthLetter >> 2; (1)

cTemp = cFirstLetter << 4; (2A)

cTempHigh = cTemp & 0x30; (2B)

cTempLow = cSecondLetter >> 4; (2C)

cSecond6Bits = cTempHigh | cTempL w; (2D)

cTemp = cSecondLetter << 2; (3A)

cTempHigh = cTemp & 0x3C; (3B)

cTempLow = cThirdLetter >> 6; (3C)

cThird6Bits = cTempHigh | c TempLow; (3D)

cFourth6Bits = cThirdLetter & 0x3F; (4)

Первым делом биты переменной сFirstLetter (символа K) сдвигаются вправо на две позиции. Получается новый байт, содержащий первые шесть бит нашей последовательности. Далее полученное значение записывается в переменную cFirst6Bits. Дальше, чтобы получить следующее значение, нужно объединить два младших бита первого символа (K) с четырьмя старшими второго (E), т.е. нужно переместить первый и второй биты буквы K на позиции 5 и 6 – они будут старшими битами следующего шестибитного символа. Операция 2А, двоичный сдвиг влево на четыре позиции демонстрирует, как это делается. Результат сдвига запоминается во вспомогательной переменной cTemp.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.