2009-07-07 2 views

Répondre

10

Vous ne devriez probablement pas faire cela. Si le cookie est sensible, ne le stockez que sur le serveur.

Si vous en avez vraiment besoin, il existe plusieurs façons de le faire. Tout d'abord, vous devrez convertir le texte en clair à un tableau d'octets, comme ceci:

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

Si vous êtes sûr que votre texte en clair ne sera jamais utiliser Unicode, vous pouvez utiliser à la place ; cela se traduira par un cookie plus petit).

Ensuite, vous devrez le crypter. La façon la plus simple de le faire est d'utiliser DPAPI, comme ceci. (Premièrement, ajoutez une référence à System.Security.dll). Notez que cela ne fonctionnera pas sur une batterie de serveurs. Enfin, vous devez le convertir en texte afin que vous puissiez le mettre dans le cookie. Il est préférable de faire en base64, comme ceci:

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

Pour déchiffrer le cookie, vous devez inverser ces étapes, comme ceci:

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

Notez que le cookie sera très grand, même pour les petits textes en clair.

Si vous souhaitez l'utiliser sur une batterie de serveurs, vous pouvez utiliser AES; regarder System.Security.Cryptography.RijndaelManaged.

+0

Merci SLaks! Je vais utiliser quelque chose comme RijndaelManaged! :-) – AndreMiranda

+0

Y at-il une raison pour laquelle vous ne pouvez pas le stocker dans l'état de la session? – SLaks

+0

Je sais que cette réponse est vraiment ancienne, donc j'ai peut-être tort, mais j'ai juste essayé 'Response.AddCookie (...)' et j'ai eu une erreur. Utilisez plutôt 'Response.Cookies.Add (HttpCookie)' – Ortund

2

Le plus simple sera de ne pas le crypter! Utilisez simplement l'identifiant de cookie (plus un sel) pour rechercher les valeurs (contenu) sur le serveur.

-2

Le moyen le plus sûr de le faire est d'utiliser l'état de session ASP.Net au lieu de cookies. Étant donné que l'état de la session n'est jamais envoyé au client, vous n'avez rien à craindre.

Questions connexes