Encryption 如何在C#3.0中以简单的方式加密cookie内容?

Encryption 如何在C#3.0中以简单的方式加密cookie内容?,encryption,c#-3.0,cookies,Encryption,C# 3.0,Cookies,如何以直接和简单的方式加密cookie 谢谢 最简单的方法是不加密它!只需使用cookie ID(加一个salt)在服务器上查找值(内容)。您可能不应该这样做。如果cookie是敏感的,则仅将其存储在服务器上 如果你真的需要,有很多方法可以做到。首先,您需要将明文转换为字节数组,如下所示: var plainBytes = Encoding.UTF8.GetBytes(plaintext); Response.AddCookie("MyEncryptedCookie", Convert.ToB

如何以直接和简单的方式加密cookie


谢谢

最简单的方法是不加密它!只需使用cookie ID(加一个salt)在服务器上查找值(内容)。

您可能不应该这样做。如果cookie是敏感的,则仅将其存储在服务器上

如果你真的需要,有很多方法可以做到。首先,您需要将明文转换为字节数组,如下所示:

var plainBytes = Encoding.UTF8.GetBytes(plaintext);
Response.AddCookie("MyEncryptedCookie", Convert.ToBase64String(encryptedBytes));
var encryptedBytes = Convert.FromBase64String(Request.Cookies["MyEncryptedCookie"].Value);
var decryptedBytes = ProtectedData.Unprotect(encryptedBytes , null, DataProtectionScope.CurrentUser);
var plaintext = Encoding.UTF8.GetString(decryptedBytes);
如果您确信您的明文永远不会使用Unicode,您可以使用
编码.ASCII
;这将导致较小的cookie)

然后,您需要对其进行加密。最简单的方法是使用DPAPI,如下所示。(首先,添加对
System.Security.dll
的引用)。请注意,这在服务器场上不起作用

var encryptedBytes = ProtectedData.Protect(plainBytes, null, DataProtectionScope.CurrentUser);
最后,您需要将其转换回文本,以便将其放入cookie中。这最好在Base64中完成,如下所示:

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

要解密cookie,您需要反向执行以下步骤,如下所示:

var plainBytes = Encoding.UTF8.GetBytes(plaintext);
Response.AddCookie("MyEncryptedCookie", Convert.ToBase64String(encryptedBytes));
var encryptedBytes = Convert.FromBase64String(Request.Cookies["MyEncryptedCookie"].Value);
var decryptedBytes = ProtectedData.Unprotect(encryptedBytes , null, DataProtectionScope.CurrentUser);
var plaintext = Encoding.UTF8.GetString(decryptedBytes);
请注意,cookie将非常大,即使对于小的明文也是如此


如果您想在服务器场上使用它,可以使用AES;查看。

最安全的方法是使用ASP.Net会话状态而不是cookie。由于会话状态从未发送到客户端,因此您无需担心。

谢谢!我将使用RijndaelManaged!:-)您无法将其存储在会话状态中有什么原因吗?我知道这个答案很旧,所以我可能错了,但我刚刚尝试了
Response.AddCookie(…)
,但我遇到了一个错误。而是使用
Response.Cookies.Add(HttpCookie)