C # Byte [] to Url Friendly String

Pracuję nad szybkim generatorem captcha dla prostej strony, którą składam, i mam nadzieję przekazać zaszyfrowany klucz w adresie URL strony. Prawdopodobnie mógłbym to zrobić jako parametr query string dość łatwo, ale mam nadzieję, że nie zbyt (tylko dlatego, że nic innego nie działa z łańcucha zapytania)...

Mój kod szyfrujący tworzy bajt [], który jest następnie przekształcany za pomocą konwersji.ToBase64String (byte[]) do łańcucha. Ten ciąg nie jest jednak do końca przyjazny dla url, ponieważ może zawiera rzeczy takie jak ' / 'i'='. Czy ktoś zna lepszą funkcję w. NET framework do konwersji tablicy bajtów na Przyjazny URL ciąg?

Wiem wszystko o systemie.Www.HttpUtility.UrlEncode() i jego odpowiedniki, jednak działają poprawnie tylko z parametrami ciągu zapytania. Jeśli koduję adres URL ' = ' wewnątrz ścieżki, mój serwer WWW zwraca błąd złego żądania 400.

W każdym razie nie jest to problem krytyczny, ale mam nadzieję, że ktoś da mi Dobre Rozwiązanie

**EDIT: Just aby być absolutnie pewien, co dokładnie robię ze sznurkiem, pomyślałem, że podam trochę więcej informacji.

Bajt [], który wynika z mojego algorytmu szyfrowania, powinien być zasilany jakimś algorytmem, aby przekształcić go w łańcuch przyjazny url. Następnie staje się on zawartością XElement, który jest następnie używany jako dokument źródłowy dla transformacji XSLT i jest używany jako część atrybutu href dla kotwicy. Nie wierzę, że transformacja xslt powoduje problemy, ponieważ to, co przechodzi na ścieżce, wydaje się być zakodowanym parametrem ciągu zapytania, ale powoduje http 400

Próbowałem również HttpUtility.UrlPathEncode () na łańcuchu base64, ale to też nie działa (I tak kończę z ' / ' w moim url) * *

Author: LorenVS, 2009-12-11

2 answers

Szukasz HttpServerUtility.UrlTokenEncode i HttpServerUtility.UrlTokenDecode, w System.Web.

Kodują w base64, zastępując potencjalnie niebezpieczne znaki " + " i " / "znakami" - "i"_".

Dokumentacja MSDN

 85
Author: orip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-24 19:11:05

Spójrz na System.BitConverter.ToString (myByteArray)

Przydatne do jednokierunkowego kodowania dla takich rzeczy jak hasze, ale jak zauważył ssg, nie jest zbyt wydajne. Nie polecam go dla dużych ilości danych.

 1
Author: David Glenn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-11 10:32:04