2015-02-19 16 views
5

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 ==

+0

Đã thêm một số mã mẫu. – Dkong

+0

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 –

+1

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. –

Trả lời

4

ok cố định nó, chỉ cần loại bỏ các phương pháp urldecode. Giải mã xuất hiện tự động.

+0

Tôi nghĩ về câu trả lời đó, nhưng tôi không thể phát hiện ra một phương thức giải mã bổ sung .... –

Các vấn đề liên quan