Это возможно с RegEx: кодирование / шифрование идентификатора? - PullRequest
0 голосов
/ 28 января 2010

Можно ли сделать что-то подобное с регулярными выражениями: кодировать и декодировать число?

Например, я хочу закодировать идентификатор 15123 (который фактически представляет номер порта в моем случае) во что-то, что бесполезно для пользователя, например, на первый взгляд случайная строка, такая как c95Dd7!7. А затем расшифруйте его потом.

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

Я знаю, что упаковщик javascript делает то же самое ... но я понятия не имею, с чего начать. Или есть какие-нибудь нестандартные примеры или решения для моего вопроса?

Спасибо!

Ответы [ 3 ]

1 голос
/ 28 января 2010

В соответствии с тем, что упомянул Стив Б.

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

Может быть, повернуть байты и вывести их в строку? Должно быть довольно нечитабельным, но легче конвертировать.

1 голос
/ 28 января 2010

Вы не сможете сделать это с помощью регулярного выражения. Вы можете выполнить операции split или replace на основе совпадений, найденных с помощью регулярных выражений. Но для этого необходимо, чтобы у вас был прямой доступ к классу Regex (я полагаю, что вы работаете с .NET на основе ваших прошлых вопросов). И даже тогда это плохой способ кодирования, шифрования или шифрования данных.

Я бы предложил симметричный алгоритм шифрования. Больше всего я использовал Rijndael . Кто-то написал класс-оболочку , чтобы сделать работу с шифрованием Rijndael очень простой.

UPDATE: Это очень грубый метод. Опять же, регулярные выражения очень плохо подходят для такого рода вещей. Но вы можете сделать что-то вроде этого, если вы просто хотите изменить порядок цифр:

Regex:

(\d)(\d)(\d)(\d)(\d)

Заменить на:

$1$4$3$5$2

По сути, это захватывает каждую цифру (\ d) в группу. Затем запись замены позволяет получить доступ к каждой группе по ее нумерованному идентификатору (первая группа - 1 доллар, вторая - 2 доллара и т. Д.).

  • 12345 станет 14352
  • 15123 станет 12135

Вот оно в действии.

0 голосов
/ 28 января 2010

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

Существует множество других способов шифрования, почему бы не использовать что-то более распространенное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...