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

时间:2009-07-07 15:53:26

标签: encryption c#-3.0 cookies

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

谢谢!

3 个答案:

答案 0 :(得分:10)

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

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

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

如果您确定您的纯文本永远不会使用Unicode,则可以使用Encoding.ASCII代替;这将导致更小的cookie。

然后,您需要加密它。最简单的方法是使用DPAPI,就像这样。 (首先,添加对System.Security.dll的引用)。请注意,这不适用于服务器场。

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

最后,您需要将其转换回文本,以便将其放入cookie中。这最好在Base64中完成,如下所示:

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

要解密cookie,您需要撤消这些步骤,如下所示:

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

请注意,即使是小型明文,cookie也会非常大。

如果要在服务器场上使用它,可以使用AES;看看System.Security.Cryptography.RijndaelManaged

答案 1 :(得分:2)

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

答案 2 :(得分:-2)

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