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

时间:2010-06-03 13:15:38

标签: c# asp.net url-rewriting

我有一个网址www.site-address / site-page / page1.aspx?username = deepu& password = deepu 我该如何更改URL www.site地址/站点页/ page1.aspx这个用户名= 232322323232&放大器;密码= 2323232322323 即我想加密我通过URL传递的字段请帮助我使用.net加密和解密C#中的URL,现在我使用response.redirect并将这些值作为查询字符串传递....请帮助...

4 个答案:

答案 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的人。看看这个

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