Comment puis-je crypter un cookie de manière directe et simple?Comment crypter un contenu de cookie de manière simple dans C# 3.0?
Merci!
Comment puis-je crypter un cookie de manière directe et simple?Comment crypter un contenu de cookie de manière simple dans C# 3.0?
Merci!
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
.
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.
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.
Merci SLaks! Je vais utiliser quelque chose comme RijndaelManaged! :-) – AndreMiranda
Y at-il une raison pour laquelle vous ne pouvez pas le stocker dans l'état de la session? – SLaks
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