2009-07-07 52 views

回答

10

你可能不應該這樣做。如果cookie非常敏感,請將其僅存儲在服務器上。

如果你真的需要,有很多方法可以做到這一點。首先,你需要將明文轉換爲字節數組,像這樣:

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

如果你確定你的明文絕不會使用Unicode,您可以使用代替;這將導致更小的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

+0

謝謝SLaks!我會使用像RijndaelManaged的東西! :-) – AndreMiranda 2009-07-07 18:48:49

2

最簡單的方法是不加密!只需使用cookie ID(加一個鹽)來查找服務器上的值(內容)。

-2

最安全的方法是使用ASP.Net會話狀態而不是cookie。由於會話狀態永遠不會發送給客戶端,因此您無需擔心。