gpt4 book ai didi

c# - 使用 AES 256 加密和解密查询字符串值

转载 作者:太空狗 更新时间:2023-10-29 19:42:34 29 4
gpt4 key购买 nike

我正在使用以下代码加密/解密查询字符串并将其从一个页面传递到另一个页面。结果输出缺少“+”(请参阅​​问题底部)。由于我已经在使用 urlencode/urldecode,我该怎么做才能确保“+”通过?

//加密页面

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

解密页面(我用这个页面打印出我从第一页解密的字符串,然后比较我在URL中得到的内容:

     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==");

}

最终结果是下面两行(第一行是URL的输出)。除了第一个 URL(编码/解码的查询字符串结果)缺少“+”符号外,它们几乎匹配。知道如何避免这种情况吗?

AUwsHc8j/llULnuwVnspNwolBUAhl5GFqC6iOrUN5euZFrOgFVypqTGfhAaooLxa0Fko 9KGtRh3UcQJtzkfSw==

AUwsHc8j/llULnuwVnspNwolBUAhl5GFqC6iOrUN5euZFrOgFVypqTGfhAaooLxa0Fko+9KGtRh3UcQJtzkfSw==

最佳答案

确定修复了它,只是删除了 urldecode 方法。解码似乎是自动发生的。

关于c# - 使用 AES 256 加密和解密查询字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28613831/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com