Вы не можете, не в произвольном смысле. Проблема просто в том, что каждый день слова тоже могут быть BASE64. Таким образом, нет никакого реального способа определить разницу между ними.
BASE64 не имеет терминатора, кроме длины. Это МОЖЕТ быть прекращено с помощью = или ==, но не ДОЛЖНО быть прекращено. = Просто дополняют. Заполнение не требуется, то нет =. Поэтому вполне возможно, что BASE64 закончится и начнется какой-то текст, и вы не сможете его обнаружить.
Отредактируйте для «Значит, действительно нет способа сделать то, что я хочу?»:
Нет, не детерминистически, не достоверно. Даже при использовании эвристики возможны случаи, когда он не будет работать, и вы в конечном итоге будете использовать слишком много символов, что приведет к мусору в конце вашего двоичного блока и потере символов в следующем текстовом потоке.
Теперь это для произвольного блока BASE64. Если вы ЗНАЕТЕ, что такое двоичные данные, тогда, возможно, есть надежда.
Например, если вы ЗНАЕТЕ, что такое двоичные данные, большинство двоичных форматов «знают», когда они «сделаны». Я не знаю действительного двоичного формата, который говорит: «Читай, пока не достигнешь EOF». Как правило, они содержат внутренние дескрипторы «это то, сколько данных имеет следующий блок» или терминаторы, говорящие «Я закончил».
В этих случаях вы можете рассматривать BASE64 как поток. BASE64 в основном довольно прост. Он занимает 3 байта и преобразует их в 4 символа.
Итак, потоковый ридер B64 должен просто прочитать 4 символа и вернуть 3 байта, которые они представляют.
Если у вас есть, скажем, программа чтения PNG, она может начать читать преобразованный поток. И когда он «готов», он «закрывает» поток, и ваш исходный текст «в конце BASE64».
Может также работать, если вы знаете размер оригинального вложения. Если кто-то отправил «10 000 байт», то вы используете потоковый декодер BASE64 и просто читаете из него «10 000 байт».
Чаще всего BASE64 будет иметь терминатор = или ==. Это случаи, когда вы этого не делаете, это проблема. Декодированный поток работает в любом случае.
Если вы не знаете исходный размер вложения или формат закодированного бинарного файла, то вам почти не повезло.