Это интересный вопрос. Глядя на составной мультимедийный тип RFC , выясняется, что агенту-составителю необходимо убедиться, что граница не отображается в инкапсулированных данных. Кроме того, в нем говорится следующее:
ПРИМЕЧАНИЕ: поскольку ограничители границ не должны появляться в частях тела
будучи инкапсулированным, пользовательский агент должен проявлять осторожность, чтобы выбрать
уникальное значение граничного параметра. Значение граничного параметра в
Пример выше мог бы быть результатом алгоритма, предназначенного для
производить граничные разделители с очень низкой вероятностью уже
существующие в данных, которые будут инкапсулированы без предварительного сканирования
данные.
Я понимаю, что это означает, что для того, чтобы убедиться, что граничное значение не появляется в инкапсулированных данных, вам придется сканировать данные для граничного значения. Поскольку в большинстве случаев это недопустимо дорогая операция, ожидается, что пользовательские агенты просто выберут значение, вероятность появления которого в данных очень мала.
Рассмотрим вероятность того, что граница в вашем примере встречается в виде случайной строки байтов (которая в качестве аргумента, мы предположим, представляет собой изображение JPEG). Полная строка, которая должна соответствовать, чтобы досрочно завершить данные вашего изображения, будет "\ r \ n - AaB03x" - 10 байтов или 80 битов. Начиная с любого бита, вероятность того, что следующие 10 байтов будут этой последовательностью, равна 1 в 2 ^ 80. В файле JPEG размером 1 МБ содержится 2 ^ 23 бита. Это означает, что вероятность файла JPEG, содержащего последовательность, составляет менее 2 ^ 23/2 ^ 80 или один из 2 ^ 57 (более ста квадриллионов).
Итак, я думаю, что ответ заключается в том, что, чтобы быть на 100% уверенным, вам придется проверить данные для граничной последовательности, а затем использовать другую, если эта граничная последовательность существует в данных. Но на практике шансы возникновения граничной последовательности достаточно малы, так что это того не стоит.