C# 加密(&);使用AES 256解密查询字符串值

C# 加密(&);使用AES 256解密查询字符串值,c#,asp.net,encryption,cryptography,C#,Asp.net,Encryption,Cryptography,我使用以下代码加密/解密查询字符串,并将其从一个页面传递到另一个页面。结果输出缺少“+”(请参见问题底部)。由于我已经在使用urlencode/URLEDECODE,如何确保“+”通过 //加密页 protected void Page_Load(object sender, EventArgs e) { string text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Response.Write("

我使用以下代码加密/解密查询字符串,并将其从一个页面传递到另一个页面。结果输出缺少“+”(请参见问题底部)。由于我已经在使用urlencode/URLEDECODE,如何确保“+”通过

//加密页

    protected void Page_Load(object sender, EventArgs e)
    {
        string text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";            
        Response.Write("256:" + Decrypt256(Encrypt256(text)));
        Response.Write(string.Format("<br/><a href=\"decrypt.aspx?p={0}\">{0}</a>", HttpUtility.UrlEncode(Encrypt256(text))));            
    }


    private const string AesIV256 = @"!QAZ2WSX#EDC4RFV";
    private const string AesKey256 = @"5TGB&YHN7UJM(IK<5TGB&YHN7UJM(IK<";


    private string Encrypt256(string text)
    {            
        // AesCryptoServiceProvider
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();            
        aes.BlockSize = 128;
        aes.KeySize = 256;
        aes.IV = Encoding.UTF8.GetBytes(AesIV256);
        aes.Key = Encoding.UTF8.GetBytes(AesKey256);
        aes.Mode = CipherMode.CBC;
        aes.Padding = PaddingMode.PKCS7;

        // Convert string to byte array
        byte[] src = Encoding.Unicode.GetBytes(text);

        // encryption
        using (ICryptoTransform encrypt = aes.CreateEncryptor())
        {
            byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);

            // Convert byte array to Base64 strings
            return Convert.ToBase64String(dest);
        }
    }

    /// <summary>
    /// AES decryption
    /// </summary>
    private string Decrypt256(string text)
    {            
        // AesCryptoServiceProvider
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
        aes.BlockSize = 128;
        aes.KeySize = 256;
        aes.IV = Encoding.UTF8.GetBytes(AesIV256);
        aes.Key = Encoding.UTF8.GetBytes(AesKey256);
        aes.Mode = CipherMode.CBC;
        aes.Padding = PaddingMode.PKCS7;

        // Convert Base64 strings to byte array
        byte[] src = System.Convert.FromBase64String(text);

        // decryption
        using (ICryptoTransform decrypt = aes.CreateDecryptor())
        {
            byte[] dest = decrypt.TransformFinalBlock(src, 0, src.Length);
            return Encoding.Unicode.GetString(dest);
        }
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
string text=“abcdefghijklmnopqrstuvxyz”;
写(“256:+Decrypt256(Encrypt256(text)));
Write(string.Format(“
”),HttpUtility.UrlEncode(Encrypt256(text)); } 私有常量字符串AesIV256=@“!QAZ2WSX#EDC4RFV”;
私有常量字符串AESKY256=@“5TGB&YHN7UJM(IKok修复了它,只是删除了urldecode方法。解码似乎是自动进行的。

添加了一些示例代码。检查有关在查询字符串中传递base64编码字符串的回答:通过By,
AESCryptServiceProvider
实现了
IDisposable
接口,因此它的用法也应该包装在中e> 使用
block正确地确定资源的处置。@JimFlood你可以使用“共享”按钮,指向正确的答案(得票最多的那一个,在本例中不是被接受的那个),而不是问题。只是一个提示…@MaartenBodewes你找错人了。我想你是想回答Jim Flood。
     protected void Page_Load(object sender, EventArgs e)
    {
        string urlValue = HttpUtility.UrlDecode(Request.QueryString["p"].Trim());
     Decrypt256(Encoding.ASCII.GetString(s2));            

        Response.Write(urlValue + "<br /><br />");     
        Response.Write("AUwsHc8j/llULnuwVnspNwolBUAhl5GFqC6iOrUN5euZFrOgFVypqTGfhAaooLxa0Fko+9KGtRh3UcQJtzkfSw==");            

    }