Tôi đang sử dụng mã sau để Mã hóa/Giải mã chuỗi truy vấn và chuyển nó từ trang này sang trang khác. Kết quả đầu ra là thiếu một '+' (xem ở dưới cùng của câu hỏi). Tôi có thể làm gì để đảm bảo rằng dấu '+' xuất hiện khi tôi đang sử dụng urlencode/urldecode?Mã hóa & Giải mã các giá trị chuỗi truy vấn bằng AES 256
// Mã hóa trang
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);
}
}
trang giải mã (Tôi sử dụng trang này để in ra những gì tôi chuỗi giải mã từ trang đầu tiên và sau đó so sánh nó những gì tôi nhận được trong 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==");
}
Kết quả cuối cùng là hai dòng sau (dòng đầu tiên là đầu ra từ URL), chúng gần như khớp với URL đầu tiên (kết quả chuỗi truy vấn được mã hóa/giải mã) thiếu biểu tượng '+'. này?
AUwsHc8j/llULnuwVnspNwolBUAhl5GFqC6iOrUN5euZFrOgFVypqTGfhAaooLxa0Fko 9KGtRh3UcQJtzkfSw ==
AUwsHc8j/llULnuwVnspNwolBUAhl5GFqC6iOrUN5euZFrOgFVypqTGfhAaooLxa0Fko + 9KGtRh3UcQJtzkfSw ==
Đã thêm một số mã mẫu. – Dkong
Kiểm tra câu trả lời này liên quan đến việc chuyển các chuỗi được mã hóa base64 trong chuỗi truy vấn: http://stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url –
By the by, 'AesCryptoServiceProvider' thực hiện' IDisposable' giao diện, vì vậy việc sử dụng nó cũng phải được bao bọc trong một khối 'sử dụng' để xử lý các tài nguyên xác định đúng đắn. –