Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > BASE 64


Автор: saider84 30.4.2008, 14:47
Подскажите пожалуйста. Есть ли функция, которая определяет закодирована ли строка в BASE 64.  Или может кто сам писал подобную функцию.

Автор: Snowy 30.4.2008, 16:05
А функция простая - попробовать декодировать.
Получилось - да. Не получилось - нет...

Автор: mmvds 30.4.2008, 22:33
Snowy, не все так просто.

Если строка содержит любые другие символы кроме:
Код

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

То она точно не Base 64, вот обратное сказать нельзя :( 
Т.к. Base64 спокойно декодирует любую строку, содержащую вышеперечисленные символы, даже если та не была получена с помошью Base 64.
Пример:
Возьмем строчку 
Код

vingradforum

Она свободно декодируется Base64, получаем
Код

ѕ)а­§_ў»¦

Т.е. если у нас была строчка vingradforum то про нее мы не можем однозначно сказать, Base64 это или строчка написанная от балды.

Автор: saider84 3.5.2008, 10:13
mmvds, а если исходный текст это файл, как поступить в такой ситуации.

Сейчас пользуюсь indy`ской функцией декодирования, отсекаю некодированные файлы по признакам кратности длины.
Может будут еще какие-нить предложения?

Автор: mmvds 3.5.2008, 12:32
Проверить весь файл, если в нем присутствует любой символ, не входящий в алфавит Base64
Код

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

то это не Base64.

Если известен хотябы тип файла, проверять декодированный файл на соответствие формату данного типа.

Также если исходный файл-текстовый и известно, на каком он языке и в какой кодировке, и необходимо отфильтровывать большое кол-во файлов, то можно применить частотный метод  (частота встречаемости символов) чтоб проверять декодированный файл.

На практике как мне кажется должно хватить отсечения по алфавиту, если это обычный файл, вероятность появления хотябы 1 символа не из алфавита очень большая.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)