2008-12-07 3 views
0

У меня есть строка, которая закодирована base64. Как я могу найти эту строку, чтобы проверить, содержит ли эта строка конкретную подстроку, которая не закодирована? Я не хочу расшифровывать эту строку, а затем искать ее.Base64 закодированный поиск строки

Могу ли я просто кодировать эту конкретную подстроку и искать закодированную строку с использованием закодированной подстроки?

Спасибо,

ответ

0

в base64 может принимать несколько различных форм или значений с различными алгоритмами или реализациями. Даже глядя на примеры на Wikipedia, можно видеть, что закодированные значения символов могут меняться в зависимости от позиции. Короткий ответ: нет, вы не можете кодировать только строку и искать в более крупном закодированном тексте.

+0

Good xref; не уверен в «разных значениях». Тот же текст может быть закодирован в 3 разных формах, в зависимости от того, является ли это первым, вторым или третьим байтом в строке. И это, безусловно, усложняет поиск. – 2008-12-07 07:30:38

+0

Да, это то, что я пытался понять и упростить. – 2008-12-07 19:48:50

-1

Вы не можете просто искать закодированную подстроку. Строка поиска будет кодироваться по-разному в зависимости от того, где в исходной строке она отображается. Я думаю, вам нужно будет декодировать всю строку и затем искать подстроку.

8

Лучшим способом, вероятно, является просто декодирование строки. Однако, если это действительно необходимо, это можно сделать «на лету» вместо полного декодирования, за которым следует поиск. Вам придется реализовать свой один поиск и просто декодировать только ту часть, которую вы сейчас проверяете. Это, скорее всего, полезно, только если у вас очень большие строки, которые вы действительно не хотите (или не можете) хранить дважды в памяти.

Если строка, которую вы ищете, достаточно длинна, вы можете также закодировать эту строку три раза с помощью различных дополнений (например, '', 'x' и 'xx') и искать тех, у кого нет первых 4 и последних 4 символов (вы не хотите соответствовать заполнению). Когда вы найдете совпадение, вы должны убедиться, что выравнивание соответствует заполнению и убедитесь, что части, которые вы еще не набрали (из-за заполнения), также находятся на своем месте. Последнее, конечно, требует некоторого декодирования.

2

Предполагая, что вы знаете точную форму кодировки base64, вы можете кодировать вашу строку, как если бы она произошла в каждом из трех смещений (start% 3 == 0, start% 3 == 1, start% 3 == 2). Вы должны быть хитрыми вокруг начала и конца строки, так как эти символы будут затронуты окружающими данными. Затем вы можете просто использовать обычный индекс IndexOf или что-то еще, чтобы проверить среднюю часть строки, а затем лучше проверить начало и конец.

Лично я бы не пошел на все эти проблемы, хотя, как другие рекомендации рекомендуют, просто расшифруйте и затем выполните поиск. Это будет много легче получить право.