Поиск в кодировке Base64 - PullRequest
1 голос
/ 07 декабря 2008

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

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

Спасибо

Ответы [ 4 ]

8 голосов
/ 07 декабря 2008

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

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

2 голосов
/ 07 декабря 2008

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

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

0 голосов
/ 07 декабря 2008

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

0 голосов
/ 07 декабря 2008

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

...