是否可以包含+、*、/和-等符号以base64格式进行编码

本文关键字:格式 base64 符号 编码 包含 是否 | 更新日期: 2023-09-27 17:58:09

我使用base64加密html标记是为了解决代码的回发问题。我的html标记包含+、-、/或*等符号。在解密加密字符串时,我得到以下错误:

Base-64字符数组的长度无效。

有人能在这里提出一个变通办法吗?

从aspx页面调用JavaScript。

 var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    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#解码字符串@pageload:的代码

 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页面调用解密方法:

protected void Page_Load(对象发送方,EventArgs e){

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

}

我调用htmlEncode的Javascript函数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);
    }

是否可以包含+、*、/和-等符号以base64格式进行编码

为什么不使用HttpUtility.HtmlEncode方法

以防止攻击

编码任何字符都不会有任何问题,因为您不是在编码字符,而是在编码字节。

我想你得到的错误是由于你的base64编码字符串的legnth不正确。Base64编码有效地将三个字节的组更改为四个字符的组。这意味着解码器将需要一个四个字符的倍数的字符串进行解码。这是通过使用特殊字符"="来填充来实现的。这允许解码器知道这些字节不存在(而不是空白或确实丢失)。

很可能您遇到问题纯粹是因为您正在解码的字符串中的字符数。

http://base64encode.org/可能有助于验证您正在生成的字符串,以检查您的问题是编码还是解码。