asp.net 如何在C#中加密/解密url

gkn4icbw  于 2022-12-15  发布在  .NET
关注(0)|答案(4)|浏览(213)

我有一个网址www.site-address/site-page/page1.aspx?用户名=deepu&密码=deepu我怎么能改变网址到www.site-address/site-page/page1.aspx?用户名= 232322323232322323即我想加密字段我通过网址传递请帮助我加密和解密的网址在C#使用.net,现在我正在使用response.redirect并将这些值作为查询字符串传递....请帮助....

hi3rlvi2

hi3rlvi21#

它不会以你想要的方式工作,但是的加密是可能的,如下面提到的方式

加密页面:

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;
        }
}
s8vozzvw

s8vozzvw2#

你的方法是有缺陷的,加密不会真正帮助潜在的问题。如果你走出去,通过"网络“你将很少(应该永远不会)看到像你所描述的模式,即使它是加密的。
相反,您应该尽可能安全地将用户凭据存储在服务器上,并在查询字符串中传递一个唯一的短期会话令牌,您可以使用该令牌查找凭据。
至于在服务器上安全地存储,一旦第一次收到用户密码,就应该使用带salt的单向散列,如SHA 256,可以将该值传递到任何地方,存储它,验证时,将潜在密码的哈希值与您存储的哈希值进行比较。将用户密码视为有毒废物-尽快将其丢弃。你想从事密码存储业务就像你想从事有毒废物存储业务一样糟糕。
(从我的iPhone回答,链接即将到来或如果有人想帮我!:))

xmjla07d

xmjla07d3#

您真的要这样做吗?如果您为用户名和密码而烦恼,那么您提供的信息或功能可能会有一些价值。通过URL参数传递,您会留下大量的攻击面(尤其是重放攻击,任何人都可以冒充您的用户)。
您真正想做的是什么?为什么不能使用what's provided in ASP.NET

s5a0g9ez

s5a0g9ez4#

你为什么不发布这些值而不是使用querystring呢?使用SSL至少没有人会看到加密的密码或其他密码。URL中的额外密码不提供任何安全性。这就像把你家的钥匙分散在附近,希望没有人会试图打开你的房子。
基本上这是一个有缺陷的前提。url以多种方式缓存,所以不在里面放密码是有意义的。
然而,你并不是唯一一个把密码放在URL中的人。
http://support.microsoft.com/kb/135975

相关问题