我有一个网址www.site-address / site-page / page1.aspx?username = deepu& password = deepu 我该如何更改URL www.site地址/站点页/ page1.aspx这个用户名= 232322323232&放大器;密码= 2323232322323 即我想加密我通过URL传递的字段请帮助我使用.net加密和解密C#中的URL,现在我使用response.redirect并将这些值作为查询字符串传递....请帮助...
答案 0 :(得分:7)
它不会以你想要的方式工作,但可以通过下面提到的方式进行加密
加密页面:
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;
}
}
答案 1 :(得分:5)
您的方法存在缺陷,加密不会真正帮助解决潜在问题。如果你穿过'网络,你将很少(绝不应该)看到你所描述的模式,即使它是加密的。
相反,您应该尽可能安全地将用户凭据存储在服务器上,并在可用于查找凭据的查询字符串中传递一个唯一的短期会话令牌。
至于安全地存储在服务器上,一旦你第一次收到用户的密码,你应该使用单向哈希,比如SHA256,加盐。您可以在任何地方传递此值,存储它,并验证将潜在密码的含量与您存储的散列进行比较。像有毒废物一样对待用户的密码 - 尽快将其丢弃。您希望密码存储业务与有毒废物存储业务一样严重。
(从我的iPhone回复,链接即将发布,或者如果有人想帮助我!))。
答案 2 :(得分:4)
你真的想这样做吗?如果您烦扰用户名和密码,可能会对您提供的信息或功能有一些价值。通过URL参数传递,您可以大量打开多个攻击面(尤其是任何人都可以冒充用户的重放攻击。
你真正想做什么,为什么不能使用what's provided in ASP.NET?
答案 3 :(得分:1)
为什么不发布值而不是使用查询字符串?使用SSL至少没有人会看到密码加密或其他方式。 URL中的其他密码不提供任何安全性。这就像把钥匙散落到整个社区的房子里,并希望没有人会试着打开你的房子。
基本上它是一个有缺陷的前提。网址以多种方式缓存,因此不将密码放入其中是有意义的。
但是,您并不是唯一一个将密码放入URL的人。看看这个