如何在C#中加密/解密url

我有一个URL www.site-address / site-page / page1.aspx?username = deepu&password = deepu如何将URL更改为www.site-address / site-page / page1.aspx?username = 232322323232&password = 2323232322323 ie我想加密我通过URL传递的字段,请帮助我使用.net加密和解密C#中的URL,现在我使用response.redirect并将这些值作为查询字符串传递….请帮助….

你的方法是有缺陷的,加密不会真正帮助潜在的问题。 如果你走出网络,你很少(绝不应该)看到一个类似你所描述的模式,即使它是加密的。

相反,您应该尽可能安全地将用户凭据存储在服务器上,并在可用于查找凭据的查询字符串中传递唯一的短期会话令牌。

至于安全地存储在服务器上,一旦你第一次收到用户的密码,你应该使用单向哈希,比如SHA256,加盐。 您可以在任何地方传递此值,存储它,并validation将潜在密码的值与您存储的哈希值进行比较。 将用户密码视为有毒废物 – 尽快将其丢弃。 您希望密码存储业务与您想要进入有毒废物存储业务一样糟糕。

(从我的iPhone回复,链接即将到来或如果有人想帮助我!:))

它不会以您想要的方式工作,但可以通过下面提到的方式进行加密

加密页面:

string id1 = "id1"; Response.Redirect("decryptionPage.aspx?id1=" + HttpUtility.UrlEncode(Encrypt(id1))); private string Encrypt(string stringToEncrypt) { byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt); byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c }; byte[] key = { }; try { key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q"); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); return Convert.ToBase64String(ms.ToArray()); } catch (Exception e) { return e.Message; } } 

解密页面:

 string getId1 = Convert.ToString(Request.QueryString["id1"]); var qs = Decrypt(HttpUtility.UrlDecode(getId1)); private string Decrypt(string EncryptedText) { byte[] inputByteArray = new byte[EncryptedText.Length + 1]; byte[] rgbIV = { 0x21, 0x43, 0x56, 0x87, 0x10, 0xfd, 0xea, 0x1c }; byte[] key = { }; try { key = System.Text.Encoding.UTF8.GetBytes("A0D1nX0Q"); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); inputByteArray = Convert.FromBase64String(EncryptedText); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, rgbIV), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); System.Text.Encoding encoding = System.Text.Encoding.UTF8; return encoding.GetString(ms.ToArray()); } catch (Exception e) { return e.Message; } } 

你真的想这样做吗? 如果您烦扰用户名和密码,可能会对您提供的信息或function有一些价值。 通过URL参数传递,您可以大量打开多个攻击面(尤其是重放攻击,任何人都可以冒充用户。

你真的想做什么,为什么不能使用ASP.NET提供的东西 ?

为什么不发布值而不是使用查询字符串? 使用SSL至少没有人会看到密码加密或其他。 URL中的其他密码不提供任何安全性。 这就像把钥匙散落到整个社区的房子里,并希望没有人会试着打开你的房子。

基本上它是一个有缺陷的前提。 url以多种方式缓存,因此不将密码放入其中是有意义的。

但是,您并不是唯一一个将密码放入URL的人。 看一下这个

http://support.microsoft.com/kb/135975