Content:
General
Security/hack
Programming
FAQ/Humor
 
 
наша рассылка
Твой E-mail:
Submit
 
 
  Алгоритм Base64
 
 
  Самое простое и понятное описание этого алгоритма я когда-то прочитал в журнале CodePimps_3x00, за что им большое спасибо. Перекопав весь свой жесткий диск, я всё же нашел эту статью и перепечатываю её тут с небольшими изменениями и добавлениями.

В старые добрые времена для передеча электронной почты в Интернет использовался только текст. Но время меняются, и по почте захотелось передавать всё, что только в голову взбредет. Будь то аудио файл, будь то фотография или даже видео и т.п. Но проблема стояла в том, что с течением времени почтовые сервера так и не научились принимать ничего, кроме текста. Тогда было решено преобразовывать двоичные файлы в текстовые. Так появился на свет алгоритм UUE. Были, конечно, и другие, менее популяpный методы, например, XX-кодиpованием, которые отличатеся от UUE только набоpом символов.

Потом уже появился еще один метод - base64. Этот способ используется в спецификации MIME (RFC2045-2049). MIME означает "Multipurpose Internet Mail Extensions" (многоцелевые расширения почтового стандарта Internet). Кратко можно сказать, что это стандарт, по которому описывается, как пересылать по электронной почте бинарные, графические, мультимедийные или же смешанные данные. Теперь, в одно письмо мы можем засунуть само письмо (текст), какой-нибудь графический файл (например, фотографию) и архив (например, с трояном :)). Благодаря стандарту MIME почтовая программа получателя может легко извлечь из нашего письма (которые полностью на самом деле состоит из текста) само письмо, графический файл и архив.

Base64 представляет собой обратимый алгоритм шифрования. Он используется некоторыми серверами для аутентификации пользователя, некоторые используют его для проверки контрольной суммы, однако последнее весьма неудобно, и часто вместо base64 используют md5. Мы рассмотрим первый вариант, который использует basic authentication. В отличие от md5, которым шифруется только пароль, base64 криптуют цепочку логин:пароль, например:
login:passwd будет выглядеть как bG9naW46cGFzc3dk

Base64 использует 65 символов из US-ASCII. Сначала Base64 присваивает каждому символу соответствующую цифру из US-ASCII, так для буквы m это 109. Затем, эта цифра переводится в бинарный формат, т.е. например: символ m, ему соответствует цифра 109, что в бинарном виде будет 01101101. Здесь 8 бит, Base64 разделяет их на 6 бит.

Например:
есть слово "mne", это будет 109 110 101, в бинарном виде: 01101101 01101110 01100101. По 6 бит: 011011 010110 111001 100101. Эти 4 6-битных значения, если перевести из бинарного вида, будут соответствовать цифрам: 27 22 57 37. А эти цифры по таблице Base64:
27 = b
22 = W
57 = 5
37 = l
Таким образом, слово "mne" будет ничем иным, как "bW5l".


Таблица: Base64

Value Encoding  Value Encoding  Value Encoding  Value Encoding
  0      A        17     R        34     i        51     z
  1      B        18     S        35     j        52     0
  2      C        19     T        36     k        53     1
  3      D        20     U        37     l        54     2
  4      E        21     V        38     m        55     3
  5      F        22     W        39     n        56     4
  6      G        23     X        40     o        57     5
  7      H        24     Y        41     p        58     6
  8      I        25     Z        42     q        59     7
  9      J        26     a        43     r        60     8
 10      K        27     b        44     s        61     9
 11      L        28     c        45     t        62     +
 12      M        29     d        46     u        63     /
 13      N        30     e        47     v
 14      O        31     f        48     w         
 15      P        32     g        49     x        (pad) =
 16      Q        33     h        50     y


Декодирование алгоритма Base64:
1. Переведите символы соответственно таблице кодов Base64.
2. Переведите полученные значения в бинарный вид.
3. Совместите все 6-битные значения в одну линию.
4. Разделите линию по 8 бит.
5. Переведите 8-битные значения в соответствующие числа.
6. Переведите полученные значения в US-ASCII значения.

Источник: CodePimps_3x00.

.:: Special for Open Team E-zine ::.

Добавления: latys
Public icq: 327656483

 
Интро | О проекте | Услуги | Статьи | Обратная связь
Freelance web designer