译文地址:http://www.codeproject.com/Tips/872826/Encrypt-Decrypt-Cookies-in-ASP-NET
源代码:http://files.cnblogs.com/files/yplong/ShanuBasicCSharpOOPConceptV1.4.zip
简介:
在这个话题中,我将说明如何加密和解密cookies的值。cookies是一个在浏览器端存储值的text文件。作为cookies存储在一个简单的text文件中,很容易被读取和修改cookies内容。
然而你可以对cookies进行加密和解密来达到一定的安全性。本文中我们将使用"MachineKey.Protect
” 和 “MachineKey.Unprotect
”两个方法来加密和解密。
MachineKey.Protect()
和 MachineKey.Unprotect()
是应用在ASP.NET4.5中。这两个方法需要2个参数,第一个参数就是要进行加密和解密的内容文件的字节形式,第二个参数就是目的。目的就像一个键(key),可以是字符串类型的值。我们需要通过相同的目的值来对值进行加保护和解保护。
源码设计:
1 <div> 2 <asp:TextBox ID="txtvalue" runat="server" 3 placeholder="Enter Some Text" Width="250"> 4 </asp:TextBox><br /> 5 <asp:Label runat="server" ID="lblmsg" ForeColor="Green" 6 Font-Bold="true"></asp:Label><br /> 7 <asp:Button ID="btnEncrypt" 8 runat="server" Text="Encrypt" 9 OnClick="btnEncrypt_Click" /> 10 <asp:Button ID="btnDecrypt" runat="server" Text="Decrypt" 11 OnClick="btnDecrypt_Click" Style="height: 26px" /> 12 </div>
代码的实际操作:
使用命名空间:
1 //using System.Text; 2 //using System.Web.Security; 3 4 protected void btnEncrypt_Click(object sender, EventArgs e) 5 { 6 var cookieText = Encoding.UTF8.GetBytes(txtvalue.Text); 7 var encryptedValue = Convert.ToBase64String(MachineKey.Protect(cookieText, "ProtectCookie")); 8 9 //--- Create cookie object and pass name of the cookie and value to be stored. 10 HttpCookie cookieObject = new HttpCookie("NameOfCookie", encryptedValue); 11 12 //---- Set expiry time of cookie. 13 cookieObject.Expires.AddDays(5); 14 15 //---- Add cookie to cookie collection. 16 Response.Cookies.Add(cookieObject); 17 lblmsg.Text = encryptedValue; 18 } 19 protected void btnDecrypt_Click(object sender, EventArgs e) 20 { 21 var bytes = Convert.FromBase64String(Request.Cookies["NameOfCookie"].Value); 22 var output = MachineKey.Unprotect(bytes, "ProtectCookie"); 23 string result = Encoding.UTF8.GetString(output); 24 lblmsg.Text = result; 25 }
ASP.NET 4.0中:
加密:
1 var plaintextBytes = Encoding.UTF8.GetBytes("Jitendra Gangwar"); 2 var encryptedValue = MachineKey.Encode(plaintextBytes, MachineKeyProtection.All); 3 Response.Write(encryptedValue.ToString());
解密:
1 var decryptedBytes = MachineKey.Decode(encryptedValue, MachineKeyProtection.All); 2 var decryptedValue = Encoding.UTF8.GetString(decryptedBytes); 3 Response.Write(decryptedValue);
输出: