Come posso cifrare un cookie in modo diretto e semplice?Come posso crittografare un contenuto di cookie in modo semplice in C# 3.0?
Grazie !!
Come posso cifrare un cookie in modo diretto e semplice?Come posso crittografare un contenuto di cookie in modo semplice in C# 3.0?
Grazie !!
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
.
Il modo più semplice è quello di non crittografarlo! Basta usare l'ID del cookie (più un salt) per cercare i valori (contenuti) sul server.
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.
Grazie SLaks! Userò qualcosa come RijndaelManaged! :-) – AndreMiranda
C'è un motivo per cui non è possibile memorizzarlo nello stato di sessione? – SLaks
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