2009-07-07 1 views

risposta

10

Probabilmente non dovresti farlo. Se il cookie è sensibile, memorizzarlo solo sul server.

Se è davvero necessario, ci sono diversi modi per farlo. In primo luogo, è necessario convertire il testo in chiaro ad un array di byte, in questo modo:

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

Se sei sicuro che il vostro testo in chiaro non potrà mai utilizzare Unicode, è possibile utilizzare invece; questo risulterà in un cookie più piccolo).

Quindi, sarà necessario crittografarlo. Il modo più semplice per farlo è usare DPAPI, come questo. (Innanzitutto, aggiungi un riferimento a System.Security.dll). Si noti che questo non funzionerà su una server farm.

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

Infine, è necessario convertirlo nuovamente in testo in modo da poterlo inserire nel cookie. Questo è fatto meglio in Base64, in questo modo:

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

per decifrare il cookie, è necessario invertire questi passaggi, in questo modo:

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

Nota che il cookie sarà molto grande, anche per piccoli testi in chiaro.

Se si desidera utilizzare questo in una server farm, è possibile utilizzare AES; guarda System.Security.Cryptography.RijndaelManaged.

+0

Grazie SLaks! Userò qualcosa come RijndaelManaged! :-) – AndreMiranda

+0

C'è un motivo per cui non è possibile memorizzarlo nello stato di sessione? – SLaks

+0

So che questa risposta è davvero vecchia, quindi potrei sbagliarmi, ma ho appena provato 'Response.AddCookie (...)' e ho ricevuto un errore. Piuttosto usa 'Response.Cookies.Add (HttpCookie)' – Ortund

2

Il modo più semplice è quello di non crittografarlo! Basta usare l'ID del cookie (più un salt) per cercare i valori (contenuti) sul server.

-2

Il modo più sicuro per farlo è utilizzare lo stato della sessione ASP.Net invece dei cookie. Poiché lo stato della sessione non viene mai inviato al client, non avrai nulla di cui preoccuparti.