2011-06-02 112 views
0

我使用base64加密html標籤,因爲解決了我的代碼回發問題。我的html標籤包含符號,如+, - ,/或*。雖然解密加密字符串即時通訊得到以下錯誤:是否可以包含像+,*,/和 - 以base64格式編碼的符號?

無效的Base-64字符數組的長度。

有人可以在這裏提出一個解決方法嗎?

JavaScript從aspx頁面調用。

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

    function encode64(input) { 
     var output = ""; 
     var chr1, chr2, chr3; 
     var enc1, enc2, enc3, enc4; 
     var i = 0; 

     while (i < input.length) { 
      chr1 = input.charCodeAt(i++); 
      chr2 = input.charCodeAt(i++); 
      chr3 = input.charCodeAt(i++); 

      enc1 = chr1 >> 2; 
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
      enc4 = chr3 & 63; 

      if (isNaN(chr2)) { 
       enc3 = enc4 = 64; 
      } 

      else if (isNaN(chr3)) { 
       enc4 = 64; 
      } 

      output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); 
     } 

     return output; 
    } 

C#代碼來解碼字符串@頁面加載:可以通過給含有任何我所提到的符號,甚至空格字符的一個簡單的字符串來生成

public string DecodeBase64String(string encodedData) 
    { 
     byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData); 
     string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes); 

     return returnValue; 
    } 

錯誤。

HTML字符串:

"<tbody id=\"selectedColumnsTbody\">\n     <tr style=\"cursor: move;\" id=\"ExprCountryMasterID10\"><td></td><td><input id=\"chk\" checked=\"checked\" class=\"textChangeClass\" type=\"checkbox\"></td><td>CountryMaster.ID + 10</td><td><input id=\"aliastextCountryMasterID10\" class=\"aliasTextChangeClass\" value=\"\" type=\"text\"></td>><td><input id=\"hiddenIDSortCountryMasterID10\" value=\"\" type=\"hidden\"></td></tr></tbody>\n   

調用從CS頁解密方法:

保護無效的Page_Load(對象發件人,EventArgs的) {

 //HtmlTextWriter htmlTable = new HtmlTextWriter(); 

     //htmlTable.InnerHtml = htmlContent; 
     //Master.FindControl("ContentPlaceHolder1").Controls.Add(htmlTable); 
     if (Session["HtmlTable"] != null) 
     { 

      htmlContent = Session["HtmlTable"].ToString(); 
      //htmlContent = htmlContent.Replace(" ", "+"); 
      htmlContent = DecodeBase64String(htmlContent); 
      htmlTable = new HtmlGenericControl(); 
      ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1"); 
      if (contentPlaceHolder != null) 
      { 
       htmlContent = "<table cellspacing=\"0\" cellpadding=\"0\" id=\"selectedColumns\" width=\"100%\">" + htmlContent + "</table>"; 
       htmlTable.InnerHtml = htmlContent; 
       test.InnerHtml = htmlContent; 
      } 
     } 

}

的Javascript即時通訊htmlEncode 功能StoreSessionForHtml(htmlContent){

 //   var encodedObject = htmlEncode(htmlContent); 
     //   var decodedObject = htmlDecode(encodedObject); 
     //htmlContent = htmlContent.replace(/ /g, "+"); 


     var encodedObject = encode64(htmlContent); 

     var requesthtmlContentParameter = '{' + 
         'htmlContentToServer:"' + encodedObject + '"}'; 

     $.ajax({ 
      type: "POST", 
      url: "Webtop.aspx/HTMLTableContent", 
      data: requesthtmlContentParameter, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(msg) { 
       //alert("Success", msg.d); 
      }, //Event that'll be fired on Success 
      error: function() { 
       // alert("Try Again"); 

      } //Event that'll be fired on Error 
     }); 
     $("#<%= HiddenHtmlContainer.ClientID %>").val(encodedObject); 
    } 
+0

請添加更多的細節,如果您添加代碼,它會很好。 – BreakHead 2011-06-02 11:59:54

+0

請添加你在做什麼/你怎麼做的代碼片段 – mkilmanas 2011-06-02 11:59:56

+0

另外,如果你想讓我們知道你的代碼中的一些值是什麼(例如,你正在編碼的字符串和它編碼的內容),那麼我們可能能夠如果下面的答案不夠,請進行更多的調試。 – Chris 2011-06-02 12:37:33

回答

0

爲什麼不使用HttpUtility.HtmlEncode Method

防止攻擊

+0

因爲他用javascript編碼,而不是.net語言。 – Chris 2011-06-02 12:15:37

+0

加密在客戶端完成。有什麼類似的,我可以使用客戶端? – NewBie 2011-06-02 12:19:38

+0

@newBie:http://stackoverflow.com/questions/246801/how-can-you-encode-to-base64-using-javascript。這似乎表明,你正在做的就像你正在使用的功能一樣。 :) – Chris 2011-06-02 12:25:42

0

不應該有,因爲你沒有編碼字符編碼與任何字符的任何問題,你正在編碼字節。

你會得到的錯誤我會假設是由於你的base64編碼字符串的第十一個不正確。 Base 64編碼有效地將三個字節的組變成四個字符的組。這意味着解碼器需要一個字符串來解碼,它是四個字符的倍數。這是通過使用特殊字符「=」來填充的。這使解碼器知道那些字節不存在(而不是僅僅是空白或者確實缺少)。

由於您正在解碼的字符串中的字符數很可能是您有問題。

http://base64encode.org/可能有助於驗證您生成的字符串,以檢查您的問題是否與編碼或解碼有關。

+0

它的工作在那裏http://base64encode.org/。什麼不見​​了? – NewBie 2011-06-02 12:41:11

+0

是的,他的腳本與其他在線資源相同。我一直在用控制檯應用程序和HTML文件進行測試,似乎無法打破它。 @NewBie,有沒有辦法確保你的繩子在運輸過程中不會受到損壞? – GalacticCowboy 2011-06-02 12:49:34

+0

它對純文本很好,我通過編碼單個空格字符來確定它,並引發錯誤。 – NewBie 2011-06-02 12:52:31

相關問題