2013-08-03 26 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);