Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Транспортне кодування




Оскільки системи шифрування даних часто використовуються для кодування текстової інформації: листування, рахунків, платежів електронної комерції, і при цьому криптосистема має бути абсолютно прозорою для користувача, то над вихідним потоком криптосистеми часто здійснюється транспортне кодування, тобто додаткове кодування (не шифрування!) інформації винятково для забезпечення сумісності з протоколами передачі даних.

Річ у тому, що на виході криптосистеми байт може приймати всі 256 можливих значень, незалежно від того чи був вхідний потік текстовою інформацією чи ні. А при передачі поштових повідомлень багато систем орієнтовано на те, що допустимі значення байтів тексту лежать у вужчому діапазоні: всі цифри, розділові знаки, алфавіт латиниці плюс, можливо, національної мови. Перші 32 символи набору ASCII служать для спеціальних цілей. Для того, щоб вони і деякі інші службові символи ніколи не з'явилися у вихідному потоці використовується транспортне кодування.

Найбільш простий метод полягає в записі кожного байта двома шістнадцятковими цифрами-символами. Так байт 252 буде записаний двома символами 'FC'; байт з кодом 26, що потрапляє на спеціальний символ CTRL-Z, буде записаний двома допустимими символами '1A'. Але ця схема дуже надлишкова: у одному байті передається лише 4 біта інформації.

Насправді практично в будь-якій системі комунікації без проблем можна передавати близько 68 символів (латинський алфавіт рядковий і прописний, цифри і розділові знаки). З цього виходить, що цілком реально створити систему з передачею 6 біт в одному байті (26<68), тобто кодувати 3 байти довільного вмісту 4-мя байтами з виключно дозволених (так званих друкарських) символів. Подібна система була розроблена і стандартизована на рівні протоколів мережі Інтернет – це система Base64 (стандарт RFC1251).

Процес кодування перетворить 4 вхідних символу у вигляді 24-бітової групи, обробляючи їх зліва направо. Ці групи потім розглядаються як 4 сполучених 6-бітових групи, кожна з яких транслюється в одиночну цифру алфавіту base64. При кодуванні base64 вхідний потік байтів має бути впорядкований старшими бітами вперед.

Кожна 6-бітова група використовується як індекс для масиву 64-х друкарських символів. Символ, на який вказує значення індексу, поміщається у вихідний рядок. Ці символи вибрані так, щоб бути універсальними і виключають символи, що мають спеціальне призначення (".", CR, LF).

Вихідний потік (закодовані байти) повинен мати довжину рядків не більше 76 символів. Всі ознаки переходу рядка і інші символи, відсутні в таблиці 4.2, мають бути проігноровані декодером base64. Серед даних символи, не перераховані в табл. 4.2, повинні говорити про помилку передачі даних, і, відповідно, програма-декодер повинна сповістити користувача про неї.

 

 

Таблиця 4.2 - Алфавіт Base64

Зна-чення Код Зна-чення Код Зна-чення Код Зна- чення Код
  A   R   i   z
  B   S   j    
  C   T   k    
  D   U   l    
  E   V   m    
  F   W   n    
  G   X   о    
  H   Y   p    
  I   Z   q    
  J   а   r    
  K   b   s    
  L   с   t   +
  M   d   u   /
  N   e   v запов-нювач =
  O   f   w    
  P   g   x    
  Q   h   y    

 

Якщо в хвості потоку кодованих даних залишилося менше, ніж 24 біта, справа додаються нульові біти до утворення цілого числа 6-бітових груп. А до кінця 24-бітової групи може залишатися лише від 0 до 3-х невистачаючих 6-бітових груп, замість кожної з яких ставиться символ-заповнювач "=". Оскільки весь вхідний потік є цілим числом 8-бітових груп (тобто, просто байтних значень), то можливі лише такі випадки:

1) вхідний потік закінчується рівно 24-бітовою групою (довжина файлу кратна 3). В такому випадку вихідний потік закінчуватиметься чотирма символами Base64 без будь-яких додаткових символів;

2) "хвіст" вхідного потоку має довжину 8 біт. Тоді в кінці вихідного коду будуть два символи Base64, з додаванням двох символів "=";

3) "хвіст" вхідного потоку має довжину 16 біт. Тоді в кінці вихідного стоятимуть три символи Base64 і один "="

Оскільки символ "=" є хвостовим заповнювачем, його поява в тілі листа може означати лише те, що кінець даних досягнутий. Але спиратися на пошук символу "=" для виявлення кінця файлу невірно, оскільки, якщо кількість переданих бітів кратна 24, то у вихідному файлі не з'явиться жодного символу "=".

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...