Я использовал Symmetric (Rijndael) Key Algorithm (http://www.obviex.com/samples/Encryption.aspx) для шифрования идентификатора. Затем я URL-код кодирует зашифрованную версию идентификатора и передает его в строке запроса. Когда я извлекаю идентификатор из строки запроса, я сначала его декодирую, и я расшифровываю его.Алгоритм шифрования для веб-приложений
Проблема возникла недавно. Если зашифрованный идентификатор имеет как «пробелы», так и «+» (например, «abc ef + g»), кодировка URL-адресов изменяет все «пробелы» на «+». Это проблема, когда я ID-декодирую идентификатор, не знаю, что «+» было «+», а «+» было «пространством».
Если есть возможность выбрать набор символов вывода только для алфавита (т.е. только зашифрованный идентификатор использует AZ)? Или если есть какой-либо другой алгоритм 2-х алгоритмов шифрования, который имеет для меня выбор выходного набора символов?
Или я предполагаю, что моим последним вариантом было бы вручную заменить «+» в зашифрованном идентификаторе чем-то например, «_SPACE_»
С благодарностью
Я использую HttpUtility.UrlEncode() для urlencode моего зашифрованного идентификатора. Если мой зашифрованный идентификатор «abc e +», идентификатор URLencoded - «abc + e +». Как позже я буду использовать URLdecode «abc + e +»? – David
Ваш UrlEncode() неверен. Он должен выводить «abc + e% 2b». + всегда должны быть закодированы. Кроме того, вы не должны использовать пробел в ID. Это должна быть строка с кодировкой Base64. –
Да, вы правы. Оказалось, что проблема заключалась в том, что я получал querystring с HttpUtility.ParseQueryString(), который уже urldecodes querstring. Я также назвал HttpUtility.URLDecode(). Таким образом, я закончил urldecoding дважды. – David