2009-07-07 8 views

Odpowiedz

10

Prawdopodobnie nie powinieneś tego robić. Jeśli plik cookie jest wrażliwy, przechowuj go tylko na serwerze.

Jeśli naprawdę potrzebujesz, możesz to zrobić na kilka sposobów. Po pierwsze, trzeba będzie przekształcić zwykłego tekstu do tablicy bajtów, tak:

var plainBytes = Encoding.UTF8.GetBytes(plaintext); 

Jeśli masz pewność, że nigdy nie będzie używać zwykłego tekstu Unicode, można użyć zamiast; spowoduje to mniejszy plik cookie).

Następnie należy je zaszyfrować. Najprostszym sposobem na to jest użycie DPAPI, tak jak to. (Najpierw dodaj odniesienie do System.Security.dll). Zauważ, że to nie zadziała w farmie serwerów.

var encryptedBytes = ProtectedData.Protect(plainBytes, null, DataProtectionScope.CurrentUser); 

Wreszcie, należy przekonwertować go z powrotem na tekst, aby można było umieścić go w pliku cookie. Najlepiej to zrobić w Base64, tak:

Response.AddCookie("MyEncryptedCookie", Convert.ToBase64String(encryptedBytes)); 

Aby odszyfrować plik cookie, trzeba odwrócić kroki, tak:

var encryptedBytes = Convert.FromBase64String(Request.Cookies["MyEncryptedCookie"].Value); 
var decryptedBytes = ProtectedData.Unprotect(encryptedBytes , null, DataProtectionScope.CurrentUser); 
var plaintext = Encoding.UTF8.GetString(decryptedBytes); 

nocie, że ciasteczko zostanie bardzo duże, nawet dla małych tekstów.

Jeśli chcesz użyć tego na farmie serwerów, możesz użyć AES; spójrz na System.Security.Cryptography.RijndaelManaged.

+0

Dzięki SLaks! Użyję czegoś takiego jak Rijndael Managed! :-) – AndreMiranda

+0

Czy jest jakiś powód, że nie możesz go zapisać w stanie sesji? – SLaks

+0

Wiem, że ta odpowiedź jest naprawdę stara, więc mogę się mylić, ale po prostu spróbowałem 'Response.AddCookie (...)' i dostałem błąd. Zamiast tego użyj 'Response.Cookies.Add (HttpCookie)' – Ortund

2

Najprostszym sposobem będzie nieszyfrowanie! Wystarczy użyć identyfikatora pliku cookie (oraz soli), aby wyszukać wartości (zawartość) na serwerze.

-2

Najbezpieczniejszym sposobem wykonania tej czynności jest użycie stanu sesji ASP.Net zamiast plików cookie. Ponieważ stan sesji nigdy nie jest wysyłany do klienta, nie musisz się martwić.

Powiązane problemy