2013-08-03 51 views
0

我試圖使用下面的代碼加密和解密cookie。我能夠加密但解密功能接受字節輸入。我怎樣才能將cookie轉換爲解密字節?該錯誤是加密cookies

不能隱式轉換型 「System.Web.HttpCookie」 到「字節[]

誤差線是 「字節[]加密=的myCookie;」 我怎樣才能轉換解密之前的 「cookie」 爲byte [] Enryption:

HttpCookie myCookie = new HttpCookie("co"); 
myCookie.Values.Add("customerId", dr["customerId"].ToString()); 

using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider()) 
{ 
    byte[] encrypted = AesEncryption.EncryptStringToBytes_Aes(myCookie.ToString(), myAes.Key, myAes.IV); 
} 
Response.Cookies.Add(myCookie); 

能解密:

HttpCookie myCookie = Request.Cookies["co"]; 
byte[] encrypted = myCookie; 

using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider()) 
{ 
    string decripted = AesEncryption.DecryptStringFromBytes_Aes(myCookie.ToString(), myAes.Key, myAes.IV); 
} 
+0

你的加密值反向沒有被添加到擺在首位的餅乾嗎? – driis

+2

不應該使用byte [] encrypted = myCookie.ToString ..dont加密cookie,而是加密存在於其中的信息。 – thunderbird

+0

MachineKey.Protect可能是在ASP.NET中加密數據的更好選擇。 http://msdn.microsoft.com/en-us/library/system.web.security.machinekey.protect.aspx – spender

回答

0

我想你要做的是加密一個值,然後在cookie中設置該值。顯示的代碼不這樣做。你需要做的是:

  1. 加密值
  2. 轉換您的加密字節打印字符串(因爲cookie是純文本),base64編碼是一個常見的選項。
  3. 在Cookie中設置該值。
  4. 在響應中設置cookie。

當試圖回到原始值時,向後運行相同的過程。

+0

我可以將加密的數據轉換爲字符串,但不能添加到cookie。我怎樣才能應用base64編碼? – ayha

0
HttpCookie myCookie = new HttpCookie("co"); 

using (AesCryptoServiceProvider myAes = new AesCryptoServiceProvider()) 
{ 
    byte[] encrypted = AesEncryption.EncryptStringToBytes_Aes(dr["customerId"].ToString(), myAes.Key, myAes.IV); 
myCookie.Values.Add("customerId", Convert.ToBase64String(encrypted)); 
} 
Response.Cookies.Add(myCookie); 

,做之前解密

HttpCookie myCookie = Request.Cookies["co"]; 
byte[] encrypted = Convert.FromBase64String(myCookie.Value); 
1
byte[] b1 = System.Text.Encoding.ASCII.GetBytes(myCookie.ToString()); 
string str1 = Convert.ToBase64String(b1); 

byte[] b2 = Convert.FromBase64String(str1); 
string str2 = System.Text.Encoding.ASCII.GetString(b2);