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

dee*_*epu 3 c# asp.net url-rewriting

我有一个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并将这些值作为查询字符串传递....请帮助....

Ank*_*ani 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;
        }
}
Run Code Online (Sandbox Code Playgroud)

解密页面:

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;
        }
}
Run Code Online (Sandbox Code Playgroud)


Rex*_*x M 5

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

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

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

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

  • +1"你希望密码存储业务与你想要进入有毒废物存储业务一样糟糕". (2认同)