2009-08-19 2 views
2

Я использовал Symmetric (Rijndael) Key Algorithm (http://www.obviex.com/samples/Encryption.aspx) для шифрования идентификатора. Затем я URL-код кодирует зашифрованную версию идентификатора и передает его в строке запроса. Когда я извлекаю идентификатор из строки запроса, я сначала его декодирую, и я расшифровываю его.Алгоритм шифрования для веб-приложений

Проблема возникла недавно. Если зашифрованный идентификатор имеет как «пробелы», так и «+» (например, «abc ef + g»), кодировка URL-адресов изменяет все «пробелы» на «+». Это проблема, когда я ID-декодирую идентификатор, не знаю, что «+» было «+», а «+» было «пространством».

Если есть возможность выбрать набор символов вывода только для алфавита (т.е. только зашифрованный идентификатор использует AZ)? Или если есть какой-либо другой алгоритм 2-х алгоритмов шифрования, который имеет для меня выбор выходного набора символов?

Или я предполагаю, что моим последним вариантом было бы вручную заменить «+» в зашифрованном идентификаторе чем-то например, «_SPACE_»

С благодарностью

ответ

0

Вам нужно URL кодировать зашифрованного ID когда они передаются в качестве параметров запроса.

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

+0

Я использую HttpUtility.UrlEncode() для urlencode моего зашифрованного идентификатора. Если мой зашифрованный идентификатор «abc e +», идентификатор URLencoded - «abc + e +». Как позже я буду использовать URLdecode «abc + e +»? – David

+0

Ваш UrlEncode() неверен. Он должен выводить «abc + e% 2b». + всегда должны быть закодированы. Кроме того, вы не должны использовать пробел в ID. Это должна быть строка с кодировкой Base64. –

+0

Да, вы правы. Оказалось, что проблема заключалась в том, что я получал querystring с HttpUtility.ParseQueryString(), который уже urldecodes querstring. Я также назвал HttpUtility.URLDecode(). Таким образом, я закончил urldecoding дважды. – David

0

Ну, чтобы ответить на ваш вопрос на базовом уровне: Да, закодируйте зашифрованный результат в base64.

Но, должно быть, я довольно обеспокоен вашим подходом в целом.

+1

Что я могу сделать, чтобы передать зашифрованный идентификатор в строке запроса? – David

+0

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

+0

Этот идентификатор не является идентификатором пользователя. Это PK таблицы в моей базе данных. По соображениям безопасности я не хочу, чтобы пользователь знал точный идентификатор. – David

0

вы должны смотреть на то, как я решил управлять своим путем сокрытия идентификатора (в моем случае GUID, но может быть любой зашифрованную строку)

link

0

Можете ли вы вручную закодировать URL-адрес, чтобы пробелы были изменены на %20 вместо +?

+0

Спасибо. Я думаю, что я также заменил +% 2B вручную. – David

Смежные вопросы