CN104601177B - 一种基于base64编码的解码扩展实现方法 - Google Patents
一种基于base64编码的解码扩展实现方法 Download PDFInfo
- Publication number
- CN104601177B CN104601177B CN201410841106.4A CN201410841106A CN104601177B CN 104601177 B CN104601177 B CN 104601177B CN 201410841106 A CN201410841106 A CN 201410841106A CN 104601177 B CN104601177 B CN 104601177B
- Authority
- CN
- China
- Prior art keywords
- byte
- result
- computing
- value
- data group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开一种基于base64编码的解码扩展实现方法,包括:接收编码文本数据;按照预设长度对编码文本数据进行分组;将第一个数据组作为当前解码数据组;根据当前解码数据组获取初步解码字节数据组,并对初步解码字节数据组进行解码;对当前解码数据组进行检查,获得分组解码字节数,并用预设非法替换符替换解码结果中的错误数据;根据分组解码字节数更新解码长度,解码长度初始值为0;判断所有的数据组是否都解码完成,是则返回解码长度,解码结束,否则将下一个数据组作为当前解码数据组,根据当前解码数据组获取初步解码字节数据组,继续进行解码。本发明的技术方案可以对不完整的base64编码进行解码得到真实信息。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种基于base64编码的解码扩展实现方法。
背景技术
Base64是一种常用的将数据编码为可表示字符的编码方法,一般在Java、C#等语言,SDK中就有base64的编码解码的接口,但是有时候会因为某些原因,造成base64字符串长度不符合要求,不能解码。在现有技术中对于不完整的base64编码只能解码出分组得到的完整数据组的信息,对于最后一哥不完整的数据组则无法解码就会丢弃;而且对于base64编码中的错误字符一起解码,无法了解base64编码中的字符的正确性。如何将不完整的base64编码解码出完整信息是现有技术亟待解决的问题。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种基于base64编码的解码扩展实现方法。
本发明提供了一种基于base64编码的解码扩展实现方法,包括:
步骤S1:接收编码文本数据;
步骤S2:按照预设长度对所述编码文本数据进行分组,并判断最后一个数据组是否完整,是则执行步骤S4,否则执行步骤S3;
步骤S3:在所述最后一个数据组中补非正常数据使其完整,执行步骤S4;
步骤S4:将第一个数据组作为当前解码数据组;
步骤S5:根据当前解码数据组获取初步解码字节数据组,并对所述初步解码字节数据组进行解码得到解码结果;
步骤S6:对当前解码数据组进行检查,获得分组解码字节数,并用预设非法替换符替换所述解码结果中的错误数据;
步骤S7:根据所述分组解码字节数更新解码长度,所述解码长度初始值为0;
步骤S8:判断所有的数据组是否都解码完成,是则执行步骤S9,否则将下一个数据组作为当前解码数据组,返回步骤S5;
步骤S9:返回所述解码长度,解码结束;
所述步骤S5中根据当前解码数据组获取初步解码字节数据组,具体为:
步骤P1:分别用当前解码数据组中的每个字节与base64编码表中的字符进行比较,判断能否找到匹配的字符,是则将匹配字符的序号作为对应的初步解码字节数据,执行步骤P4,否则执行步骤P2;
步骤P2:分别判断当前解码数据组中的每个字节是否与预设字符匹配,是则将所述编码文本数据中的当前解码字节数据忽略,返回步骤S2,否则执行步骤P3;
步骤P3:分别判断当前解码数据组中的每个字节是否与结尾字符匹配,是则将与结尾字符对应的结尾标记作为对应的初步解码字节数据,执行步骤P4,否则用无效标记作为对应的初步解码字节数据,执行步骤P4;
步骤P4:用所述当前解码数据组中的每个字节所对应的初步解码字节数据组成初步解码字节数据组。
进一步地,所述步骤S5中根据当前解码数据组获取初步解码字节数据组,具体为:
根据所述当前解码数据组的每个字节依次从解码表中获取初步解码字节数据,用所述当前解码数据组的每个字节所对应的初步解码字节数据组成初步解码字节数据组。
进一步地,在所述步骤S5之前还包括:分别判断当前解码数据组中的每个字节是否大于预设值,是则用无效标记作为对应字节的初步解码字节数据,否则执行步骤S5。
进一步地,在所述步骤S5中对所述初步解码字节数据组进行解码得到解码结果之前还包括:判断所述初步解码字节数据组中是否有可忽略的数据,是则删除所述编码文本数据中的对应的字符,执行步骤S2,否则继续。
进一步地,判断所述初步解码字节数据组中是否有可忽略的数据,具体为:依次判断初步解码字节数据组中的初步解码字节数据是否为预设值,是则有可忽略数据,否则没有可忽略数据。
进一步地,所述步骤S2还包括:计算所述编码文本数据的长度;
所述判断最后一个数据组是否完整,具体为:判断所述编码文本数据的长度是否为预设长度的整数倍,是则最后一个数据组完整,否则最后一个数据组不完整。
进一步地,所述预设长度为4个字节;所述步骤S5中对所述初步解码字节数据组进行解码,包括:将所述4个字节的当前解码字节数据组转换为3字节的数据作为解码结果。
进一步地,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y11:将所述当前解码字节数据组中的第一字节左移2位的结果作为第一中间结果;
步骤Y12:将所述当前解码字节数据组中的所述第一字节右移4位,然后再和00000011进行与运算,将与运算的结果作为第二中间结果;
步骤Y13:将所述第一中间结果和所述第二中间结果进行或运算,将或运算结果作为所述解码结果的第一字节数据;
步骤Y14:将所述当前解码字节数据组中的第二字节左移4位的结果作为第三中间结果;
步骤Y15:将所述当前解码字节数据组中的第三字节右移2位,再和00001111进行与运算,将与运算的结果作为第四中间结果;
步骤Y16:将所述第三中间结果和所述第四中间结果进行或运算,并将或运算的结果作为所述解码结果的第二字节数据;
步骤Y17:将所述当前解码字节数据组中的所述第三字节左移6位,结果作为第五中间结果;
步骤Y18:将所述当前解码字节数据组中的第四字节与00111111进行与运算,将与运算的结果作为第六中间结果;
步骤Y19:将所述第五中间结果和所述第六中间结果进行或运算,并将或运算的结果作为所述解码结果的第三字节数据。
进一步地,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y21:将整型变量初始化为0,将所述整型变量的值更新为自身左移6位的值;
步骤Y22:将所述当前解码字节数据组中的第一字节与00111111进行与运算,再与所述整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y23:将所述整型变量的值更新为自身左移6位的值;
步骤Y24:将所述当前解码字节数据组中的第二字节与00111111进行与运算,再将与运算的结果与所述整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y25:将所述整型变量的值更新为自身左移6位的值;
步骤Y26:将所述当前解码字节数据组中的第三字节与00111111进行与运算,将与运算的结果与所述整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y27:将所述整型变量的值更新为自身左移6位的值;
步骤Y28:将所述当前解码字节数据组中的第四字节与00111111进行与运算,将与运算的结果与整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y29:将所述整型变量的值右移16位,将位移结果的低8位作为所述解码结果的第一字节数据;
步骤Y210:将所述整型变量的值右移8位,将位移结果的低8位作为所述解码结果的第二字节数据;
步骤Y211:将所述整型变量的值得低8位作为所述解码结果的第三字节数据。
进一步地,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y31:将整型变量初始化为0;
步骤Y32:将所述当前解码字节数据组的第一字节与00111111进行与运算,将与运算的结果左移18位,将移位后的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y33:将所述当前解码字节数据组的第二字节与00111111进行与运算,将与运算的结果左移12位,将移位后的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y34:将所述当前解码字节数据组的第三字节与00111111进行与运算,将与运算的结果左移6位,将移位后的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y35:将所述当前解码字节数据组的第四字节与00111111进行与运算,将与运算的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y36:将所述整型变量的值右移16位,将位移结果的低8位作为所述解码结果的第一字节数据;
步骤Y37:将所述整型变量的值右移8位,将位移结果的低8位作为所述解码结果的第二字节数据;
步骤Y38:将所述整型变量的值的低8位作为所述解码结果的第三字节数据。
进一步地,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y41:将第一整型变量初始化为0;
步骤Y42:将所述当前解码字节数据组的第一字节与00111111进行与运算,将与运算的结果替换所述第一整型变量的值;将所述第一整型变量的值更新为自身左移18位后的值;
步骤Y43:将第二整型变量初始化为0;
步骤Y44:将所述当前解码字节数据组的第二字节与00111111进行与运算,将与运算的结果替换所述第二整型变量的值;将所述第二整型变量的值更新为自身左移12位后的值;
步骤Y45:将第三整型变量初始化0;
步骤Y46:将所述当前解码字节数据组的第三字节与00111111进行与运算,将与运算的结果替换所述第三整型变量的值;将所述第三整型变量的值更新为自身左移6位后的值;
步骤Y47:将第四整型变量初始化0;
步骤Y48:将所述当前解码字节数据组的第四字节与00111111进行与运算,将与运算的结果替换所述第四整型变量的值;
步骤Y49:将所述第一整型变量的值、所述第二整型变量的值、所述第三整型变量的值、所述第四整型变量的值进行或运算,并将或运算的结果替换第五整型变量的值;
步骤Y410:将所述第五整型变量的值右移16位,将位移结果的低8位作为所述解码结果的第一字节数据;
步骤Y411:将所述第五整型变量的值右移8位,将位移结果的低8位作为所述解码结果的第二字节数据;
步骤Y412:将所述第五整型变量的值的低8位作为所述解码结果的第三字节数据。
进一步地,所述步骤S6具体包括:
步骤S6-1:将分组解码字节数初始化为0;
步骤S6-2:将错位信息标识初始化为0;
步骤S6-3:判断所述当前解码数据组的有效长度,如为1时则执行步骤S6-4,如为2则执行步骤S6-5,如为3则执行步骤S6-6,如为4则执行步骤S6-7;
步骤S6-4:根据所述当前解码数据组的有效长度为1的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7;
步骤S6-5:根据所述当前解码数据组的有效长度为2的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7;
步骤S6-6:根据所述当前解码数据组的有效长度为3的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7;
步骤S6-7:根据所述当前解码数据组的有效长度为4的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7。
进一步地,所述步骤S6-4包括:
步骤a1:判断第一标识是否置位,是则执行步骤a2,否则执行步骤S7;
步骤a2:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配,是则执行步骤a3,否则执行步骤S7;
步骤a3:在所述错位信息标识中添加错位值为1,执行步骤S7。
进一步地,所述步骤a3具体为:用所述错位信息标识的值与00000001做或运算,用或运算的结果替换错位信息标识的值。
进一步地,所述步骤S6-5包括:
步骤b1:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配,是则执行步骤b2,否则执行步骤S7;
步骤b2:判断所述初步解码字节数据组的第二字节数据是否与结尾字符匹配,是执行步骤b3,否则执行步骤S7;
步骤b3:在所述错位信息标识中添加错位值为2,执行步骤S7。
进一步地,所述步骤b3具体为:用所述错位信息标识的值与00000010做或运算,用或运算的结果替换所述错位信息标识的值。
进一步地,所述步骤S6-6包括:
步骤c1:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配,是则执行步骤c2,否则执行步骤c4;
步骤c2:判断所述初步解码字节数据组的第二字节数据是否与结尾字符匹配,是则执行步骤c3,否则执行步骤S7;
步骤c3:在所述错位信息标识中添加错位值为2,执行步骤S7;
步骤c4:判断所述初步解码字节数据组的第一字节是否为无效标记,是则执行步骤c5,否则执行步骤c6;
步骤c5:将所述解码结果的第一字节数据替换为预设非法替换符,执行步骤c6;
步骤c6:判断所述初步解码字节数据组的第二字节数据是否与所述结尾字符匹配,是则执行步骤c9,否则执行步骤c7;
步骤c7:判断所述初步解码字节数据组的第二字节是否为无效标记,是则执行步骤c8,否则执行步骤c9;
步骤c8:将所述解码结果的第一字节数据和第二字节数据替换为所述预设非法替换符,执行步骤c9;
步骤c9:判断所述初步解码字节数据组的第三字节数据是否与所述结尾字符匹配,是则执行步骤c10,否则执行步骤c11;
步骤c10:在所述错位信息标识中添加错位值为3,执行步骤c13;
步骤c11:判断所述初步解码字节数据组的第三字节是否为所述无效标记,是则执行步骤c12,否则执行步骤c13;
步骤c12:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤S7;
步骤c13:将所述分组解码字节数设为1,执行步骤S7。
进一步地,所述步骤c3具体为:用所述错位信息标识的值与00000010做或运算,用或运算的结果替换所述错位信息标识的值;
所述步骤c10具体为:用所述错位信息标识的值与00000100做或操作,用或运算的结果替换所述错位信息标识的值。
进一步地,所述步骤S6-7包括:
步骤d1:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配或为无效标记,是则执行步骤d2,否则执行步骤d3;
步骤d2:将所述解码结果的第一字节数据替换为预设非法替换符,执行步骤d3;
步骤d3:判断所述初步解码字节数据组的第二字节数据是否与所述结尾字符匹配或为所述无效标记,是则执行步骤d4,否则执行步骤d5;
步骤d4:将所述解码结果的第一字节数据和第二字节数据替换为所述预设非法替换符,执行步骤d5;
步骤d5:判断所述编码剩余长度是否大于0,是则执行步骤d6,否则执行步骤d7;
步骤d6:判断是否要求强制解码到编码结尾,是则执行步骤d14,否则执行步骤d7;
步骤d7:判断所述初步解码字节数据组的第三字节数据是否与所述结尾字符匹配,是则执行步骤d8,否则执行步骤d9;
步骤d8:将所述分组解码字节数设为1,执行步骤S7;
步骤d9:判断所述初步解码字节数据组的第三字节是否为所述无效标记,是则执行步骤d10,否则执行步骤d11;
步骤d10:将所述解码结果的第二字节数据和第三字节数据替换为预设非法替换符,执行步骤d11;
步骤d11:判断所述初步解码字节数据组的第四字节数据是否与所述结尾字符匹配,是则执行步骤d13,否则执行步骤d12;
步骤d12:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤d13;
步骤d13:将所述分组解码字节数设为2,执行步骤S7;
步骤d14:判断所述初步解码字节数据组的第三字节数据是否与所述结尾字符匹配或为所述无效标记,是则执行步骤d15,否则执行步骤d16;
步骤d15:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤d16;
步骤d16:判断所述初步解码字节数据组的第四字节数据是否与所述结尾字符匹配,是则执行步骤d17,否则执行步骤d19;
步骤d17:判断所述最后一个数据组的有效长度是否等于1,是则执行步骤d18,否则执行步骤d19;
步骤d18:将所述第一标识置位,执行步骤d22;
步骤d19:将所述第一标识复位,执行步骤d20;
步骤d20:判断所述初步解码字节数据组的第四字节是否与所述结尾字符匹配或为所述无效标记,是则执行步骤d21,否则执行步骤d22;
步骤d21:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤d22;
步骤d22:将所述分组解码字节数设为3,执行步骤S7。
进一步地,所述步骤d6包括:判断强制解码标识是否置位,是则要求强制解码到编码结尾,否则不要求强制解码到编码结尾。
进一步地,所述方法还包括获取错位信息流程,包括:
(1)判断所述错位信息标识的值是否为0,是则提示没有错位或无法确定错位;否则执行(2);
(2)用所述错位信息标识的值与000000001做与运算,判断与运算的结果是否等于0,是则提示错位信息包含1,执行(3),否则提示错位信息不包含1,执行(3);
(3)用所述错位信息标识的值与00000010做与运算,判断与运算的结果是否等于0,是则提示错位信息包含2,执行(4);否则提示错位信息不包含2,执行(4);
(4)用所述错位信息标识的值与00000100做与运算,判断与运算的结果是否等于0,是则提示错位信息包含3,否则提示错位信息不包含3。
进一步地,所述对所述初步解码字节数据组进行解码,之后还包括:将所述解码结果顺序存储到解码缓存区中;
用预设非法替换符替换所述解码结果中的数据,具体为:用预设非法替换字符替换所述解码缓存区中的所述解码结果中的数据。
进一步地,所述用预设非法替换符替换所述解码结果中的数据,之后还包括:将替换之后的解码结果顺序存储到解码缓存区中。
进一步地,将解码结果顺序存储到解码缓存区中之前还包括:判断所述解码缓存区是否符合要求,是则继续,否则解码结束。
进一步地,所述判断所述解码缓存区是否符合要求,具体为:
步骤T1:用所述编码文本数据的长度除以所述预设长度,判断余数是否为0,是则执行步骤T2,否则执行T3;
步骤T2:用所述编码文本数据的长度除以所述预设长度得到的商作为分组的组数,执行步骤T4;
步骤T3:用所述编码文本数据的长度除以所述预设长度得到的商再加1作为分组的组数,执行步骤T4;
步骤T4:用第一数据乘以所述分组的组数得到计算结果,判断计算结果是否小于所述解码缓存区的大小,是则所述解码缓存区符合要求,否则所述解码缓存区不符合要求。
进一步地,所述步骤S7中的所述根据所述分组解码字节数更新解码长度,具体为:将所述解码长度加上所述分组解码字节数作为新的解码长度。
本发明与现有技术相比,具有以下优点:
本发明的方法可以对不完整的base64编码进行解码得到真实信息,同时对当前解码数据组进行检查,并对解码结果中的错误数据进行替换,实现提醒用户base64编码中有非法字符的可能位置的目的。
附图说明
图1为本发明实施例一提供的一种基于base64编码的解码扩展实现方法的流程图;
图2为本发明实施例二提供的一种基于base64编码的解码扩展实现方法的流程图;
图3为本发明实施例三提供的一种基于base64编码的解码扩展实现方法的流程图;
图4为本发明实施例四提供的一种基于base64编码的解码扩展实现方法的流程图;
图5为本发明实施例五提供的一种对解码容器中的数据进行解码的实现方法流程图;
图6为本发明实施例六提供的一种对解码容器中的数据进行解码的实现方法流程图;
图7为本发明实施例七提供的一种对解码容器中的数据进行解码的实现方法流程图;
图8为本发明实施例八提供的一种对解码容器中的数据进行解码的实现方法流程图;
图9和图10为本发明实施例九提供的一种对解码容器中的4个字节数据依次检查,获得分组解码字节数,并对解码缓存区的字节进行替换的实现方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例适用于采用了ASCII(美国信息交换标准代码)的系统,ASCII标准如表1所示;
表1
本发明实施例中对应处理的数据均为ASCII字符对应存储在内存中的十进制数值,即为编码文本中的字节(ASCII字符)对应的解码字节数据,例如编码文本为SfG&F=,则对应的编码文本数据为83 102 71 38 70 61。在发明实施例中解码容器中的数据均统称为初步解码字节数据。
实施例一
本发明实施例一提供一种基于base64编码的解码扩展实现方法,如图1所示,包括:
步骤S1:接收编码文本数据;
步骤S2:按照预设长度对编码文本数据进行分组,并判断最后一个数据组是否完整,是则执行步骤S4,否则执行步骤S3;
在本实施例中,预设长度优选的为4个字节;
在步骤S2中还包括:计算编码文本数据的长度;判断最后一个数据组是否完整,具体为:判断所述编码文本数据的长度是否为预设长度的整数倍,是则最后一个数据组完整,否则最后一个数据组不完整;优选的可以用预设长度对编码文本数据的长度取余,判断结果是否为0,是则最后一个数据组完整,否则最后一个数据组不完整;
在步骤S1与步骤S2之间还包括:遍历编码文本数据,判断是否有可忽略字符,是则删除编码文本数据中的可忽略字符,执行步骤S2,否则直接执行步骤S2;如编码文本数据中有预设值,则说明有可忽略字符;
步骤S3:在最后一个数据组中补非正常数据使其完整,执行步骤S4;
优选的,本实施例中的非正常数据为0;
步骤S4:将第一个数据组作为当前解码数据组;
步骤S5:根据当前解码数据组获取初步解码字节数据组,并对初步解码字节数据组进行解码得到解码结果;
在本实施例中,获取初步解码字节数据组有两种实现方式,即通过解码表或者编码表;
如通过解码表实现,则具体为:根据当前解码数据组的每个字节依次从解码表中获取初步解码字节数据,用当前解码数据组的每个字节所对应的初步解码字节数据组成初步解码字节数据组;
如果是通过128字节的解码表实现,则在步骤S5之前还包括:分别判断当前解码数据组中的每个字节是否大于预设值,是则用无效标记作为对应的初步解码字节数据,否则根据当前解码数据组的每个字节依次从解码表中获取初步解码字节数据;
如通过编码获取初步解码字节数据组,则具体为:
步骤P1:分别用当前解码数据组中的每个字节与base64编码表中的字符进行比较,判断能否找到匹配的字符,是则将匹配字符的序号作为对应的初步解码字节数据,执行步骤P4,否则执行步骤P2;
步骤P2:分别判断当前解码数据组中的每个字节是否与预设字符匹配,是则将编码文本数据中的当前解码字节数据忽略,返回步骤S2,否则执行步骤P3;
步骤P3:分别判断当前解码数据组中的每个字节是否与结尾字符匹配,是则将与结尾字符对应的结尾标记作为对应的初步解码字节数据,执行步骤P4,否则用无效标记作为对应的初步解码字节数据,执行步骤P4;
步骤P4:用当前解码数据组中的每个字节所对应的初步解码字节数据组成初步解码字节数据组;
本实施例中的步骤S5的对初步解码字节数据组进行解码得到解码结果即将4个字节的解码字节数据组转换为3字节的数据作为解码结果,具体的实现过程在实施例五、六、七、八中进行详细描述;
在本实施例中,解码之后可以先存储解码结果再替换或者先对解码结果中的数据进行替换再存储替换后的数据,即对初步解码字节数据组进行解码得到解码结果并将其顺序存储到解码缓存区中,然后在步骤S6中用预设非法替换字符替换解码缓存区中的解码结果中的数据;或者在步骤S6之后将替换之后的解码结果顺序存储到解码缓存区中;
将解码结果顺序存储到解码缓存区中之前还包括:判断解码缓存区是否符合要求,是则继续,否则解码结束;判断解码缓存区是否符合要求,具体为:
步骤T1:用编码文本数据的长度除以预设长度,判断余数是否为0,是则执行步骤T2,否则执行T3;
步骤T2:用编码文本数据的长度除以预设长度得到的商作为分组的组数,执行步骤T4;
步骤T3:用编码文本数据的长度除以预设长度得到的商再加1作为分组的组数,执行步骤T4;
步骤T4:用第一数据乘以分组的组数得到计算结果,判断计算结果是否小于解码缓存区的大小,是则解码缓存区符合要求,否则解码缓存区不符合要求;
在本实施例中,优选的第一数据为3,预设长度为4;
步骤S6:对当前解码数据组进行检查,获得分组解码字节数,并用预设非法替换符替换解码结果中的错误数据;
本实施例中的步骤S6的具体实现过程在实施例九中进行详细描述;
步骤S7:根据分组解码字节数更新解码长度,解码长度初始值为0;
在本实施例中,根据分组解码字节数更新解码长度,具体为:将解码长度加上分组解码字节数作为新的解码长度;
步骤S8:判断所有的数据组是否都解码完成,是则执行步骤S9,否则将下一个数据组作为当前解码数据组,返回步骤S5;
步骤S9:返回解码长度,解码结束。
本实施例中,可以先全部分组完之后再开始进行解码,或者先对分好的一个数据组进行解码,解码完成继续分成下一个数据组再进行解码,均可以实现。以下实施例中均以线对分好的一个数据组进行解码,解码完成继续分成下一个数据组再进行解码为例进行说明。
在本实施例中,通过将最后一个不完整的数据组补非正常数据进行解码,可以对不完整的base64编码进行解码得到真实信息,同时对当前解码数据组进行检查,并对解码结果中的数据进行替换,实现提醒用户base64编码中有非法字符的可能位置的目的。
实施例二
本发明实施例二提供一种基于base64编码的解码扩展实现方法,所采用解码表如表2所示;
表2
如图2所示,本实施例的方法包括:
步骤101:接收编码文本数据并计算编码文本数据长度;
在本实施例中,以接收到的编码文本数据具体为“t&SHVtYW5vaWQ=”为例进行说明,其在内存中对应存储的十进制数值具体为“116、38、83、72、86、116、89、87、53、118、97、87、81、61”,本实施例中处理的均是内存中的数据;编码文本数据长度为14个字节;编码文本数据长度记为n;
步骤102:检查解码缓存区是否符合要求,是则执行步骤103,否则解码结束;
在本实施例中,步骤102的具体包括:
步骤102-1:用n除以4,判断余数是否为0,是则执行步骤102-2,否则执行102-3;
步骤102-2:用4除以4的商作为分组的组数,执行步骤102-4;
步骤102-3:用4除以4的商再加1作为分组的组数,执行步骤102-4;
在本实施例中,完整的标准base64编码长度为4的整数倍,编码不完整即不为标准base64编码时,需要组数再加1,得到最后分组的组数;
步骤102-4:用3乘以分组的组数得到计算结果,判断计算结果是否小于解码缓存区的大小,是则解码缓存区符合要求,否则解码缓存区不符合要求;
例如本实施例中的实例“t&SHVtYW5vaWQ=”对应到的编码文本数据的长度n为14,用14除以4的余数为2,不为0则用14除以4的商为3再加1得到4作为分组的组数,然后3乘以4得到12,所以解码缓存区的大小必须大于等于12个字节时该解码缓存区才符合要求;
步骤103:将编码文本数据中的第一个字节数据作为当前解码字节数据;
步骤104:将编码文本数据长度自减1;
步骤105:根据当前解码字节数据在解码表中查询得到初步解码字节数据;
例如当前解码字节数据为116,得到的初步解码字节数据为00101101
步骤106:判断得到的初步解码字节数据是否可以忽略,是则执行步骤111,否则执行步骤107;
具体的,在本实施例中,如初步解码字节数据为预设值,例如0xF0,则可忽略;如当前解码字节为空格、换行符、回车符、水平制表位或垂直制表位、则从解码表查询得到的值为可忽略值;
步骤107:判断解码容器的存量是否等于4,是则执行步骤108,否则执行步骤109;
步骤108:清空解码容器,执行步骤109;
在本实施例中,清空解码容器具体为:将解码容器的所有字节置零,存量设为0;
步骤109:将初步解码字节数据存入解码容器,解码容器的存量自加1;
步骤110:判断解码容器的存量是否等于4,是执行步骤112,否则返回步骤111;
步骤111:判断当前解码字节数据是否为编码文本数据中的最后一个字节数据,是则将非正常数据作为当前解码字节数据,返回步骤105,否则将下一个字节数据作为当前解码字节数据,返回步骤104;
在本实施例中,如编码文本数据长度为0则当前解码字节数据为编码文本数据中的最后一个字节数据;
步骤112:对解码容器中的数据进行解码,并将解码结果存储到解码缓存区中;
本实施例中的步骤112的具体实现过程在实施例五、六、七、九中进行详细描述;
步骤113:对解码容器中的4个字节数据依次检查,获得分组解码字节数,并对解码缓存区的错误字节数据进行替换;
本实施例中的步骤113的具体实现过程在实施例九中进行详细描述;
步骤114:根据分组解码字节数更新解码长度;
具体的,在本实施例中,步骤114为:解码长度加上分组解码字节数作为新的解码长度;
步骤115:判断分组解码字节数是否小于3,是执行步骤117,否则执行步骤116;
步骤116:将解码缓存区起始位置向后移动3字节,作为解码缓存区当前的起始位置,返回步骤111;
步骤117:返回解码长度,解码结束;
在本实施例中,解码长度的初始值为0;在解码结束后,解码缓存区内的数据就是解码的结果。
实施例三
本发明实施例三提供一种基于base64编码的解码扩展实现方法,采用了128字节的解码表,内容如表3所示;
表3
如图3所示,本实施例的方法包括:
步骤201:接收编码文本数据并计算编码文本数据长度;
步骤202:检查解码缓存区是否符合要求,是则执行步骤203,否则解码结束;
本实施例中的步骤202与实施例一的步骤102相同,在此不再赘述;
步骤203:将编码文本数据中的第一个字节数据作为当前解码字节数据;
步骤204:将编码文本数据长度自减1;
步骤205:判断当前解码字节数据是否大于127,是则执行步骤206,否则执行步骤207;
步骤206:将无效标记存入解码容器中,解码容器的存量自加1,执行步骤212;
步骤207:根据当前解码字节数据在解码表中查询得到初步解码字节数据;
步骤208:判断得到的初步解码字节数据是否可以忽略,是则执行步骤213,否则执行步骤209;
具体的,在本实施例中,如初步解码字节数据为预设值,例如0xF0,则可忽略;如当前解码字节为空格、换行符、回车符、水平制表位或垂直制表位、则从解码表查询得到的值为可忽略值;
步骤209:判断解码容器的存量是否等于4,是则执行步骤210,否则执行步骤211;
步骤210:清空解码容器,执行步骤211;
在本实施例中,清空解码容器具体为:将解码容器的所有字节置零,存量设为0;
步骤211:将初步解码字节数据存入解码容器,解码容器存量自加1,执行步骤212;
步骤212:判断解码容器的存量是否等于4,是执行步骤214,否则返回步骤213;
步骤213:判断当前解码字节数据是否为编码文本数据中的最后一个字节数据,是则将非正常数据作为当前解码字节数据,返回步骤207,否则将下一个字节数据作为当前解码字节数据,返回步骤204;
在本实施例中,如编码文本数据长度为0则当前解码字节数据为编码文本数据中的最后一个字节数据;
步骤214:对解码容器中的数据进行解码,并将解码结果存储到解码缓存区中;
本实施例中的步骤214的具体实现过程在实施例五、六、七、八中进行详细描述;
步骤215:对解码容器的4个字节数据依次检查,获得分组解码字节数,并对解码缓存区的错误字节数据进行替换;
本实施例中的步骤215的具体实现过程在实施例九中进行详细描述;
步骤216:根据分组解码字节数更新解码长度;
具体的,在本实施例中,步骤216为:解码长度加上分组解码字节数作为新的解码长度;
步骤217:判断分组解码字节数是否小于3,是则执行步骤219,否则执行步骤218;
步骤218:将解码缓存区起始位置向后移动3字节,作为解码缓存区当前的起始位置,返回步骤213;
步骤219:返回解码长度,解码结束;
在本实施例中,解码长度的初始值为0;在解码结束后,解码缓存区内的数据就是解码的结果。
实施例四
本发明实施例四提供一种基于base64编码的解码扩展实现方法,在本实施例中使用base64编码表,如表4所示;
表4
如图4所示,本实施例的方法包括:
步骤301:接收编码文本数据并计算编码文本数据长度;
步骤302:检查解码缓存区是否符合要求,是则执行步骤303,否则解码结束;
本实施例中的步骤302与实施例一的步骤102相同,在此不再赘述;
步骤303:将编码文本数据中的第一个字节数据作为当前解码字节数据;
步骤304:将编码文本数据长度自减1;
步骤305:用当前解码字节数据与base64编码表依次比较,判断能否找到与当前解码字节数据匹配的字符,如找到则执行步骤306,如未找到则执行步骤307;
步骤306:将与当前解码字节数据匹配的字符在base64编码表中的序号存入解码容器,解码容器存量自加1,然后执行步骤311;
步骤307:判断当前字节数据是否与预设字符匹配,是则返回步骤312,否则执行步骤308;
具体的,本实施例中的预设字符为:空格、换行符、回车符、水平制表位或垂直制表位,如果编码文本中有预设字符则可忽略;
步骤308:判断当前字节数据是否与结尾字符匹配,是则执行步骤309,否则执行步骤310;
在本实施例中,步骤307与步骤308的顺序可以调换,即步骤305判断为否时执行步骤308,步骤308判断为是时执行步骤310,步骤308判断为否时执行步骤307,步骤307判断判断为是时执行步骤313,步骤307判断为否时执行步骤311;同样可以实现该实施例的目的;
步骤309:将与结尾字符对应的结尾标记存入解码容器中,解码容器的存量自加1,执行步骤311;
优选的,本实施例中的结尾标记为01000000;
步骤310:将无效标记存入解码容器中,解码容器的存量自加1,执行步骤311;
步骤311:判断解码容器的存量是否等于4,则执行步骤313,否则执行步骤312;
步骤312:判断当前解码字节数据是否为编码文本数据中的最后一个字节数据,是则将非正常数据作为当前解码字节数据,返回步骤305,否则将下一个字节数据作为当前解码字节数据,返回步骤304;
在本实施例中,如编码文本数据长度为0则当前解码字节数据为编码文本数据中的最后一个字节数据;
步骤313:对解码容器中的数据进行解码,并将解码结果存储到解码缓存区中;
本实施例中的步骤313的具体实现过程在实施例五、六、七、八中进行详细描述;
步骤314:对解码容器中的4个字节数据依次检查,获得分组解码字节数,并对解码缓存区的错误字节数据进行替换;
本实施例中的步骤314的具体实现过程在实施例九中进行详细描述;
步骤315:根据分组解码字节数更新解码长度;
具体的,在本实施例中,步骤315为:解码长度加上分组解码字节数作为新的解码长度;
步骤316:判断分组解码字节数是否小于3,是则执行步骤318,否则执行步骤317;
步骤317:将解码缓存区起始位置向后移动3字节,作为解码缓存区当前的起始位置,返回步骤312;
步骤318:返回解码长度,解码结束;
在本实施例中,解码长度的初始值为0;在解码结束后,解码缓存区内的数据就是解码的结果。
实施例五
本发明实施例五提供一种对解码容器中的数据进行解码的实现方法,如图5所示,包括:
步骤401:将解码容器中的第一字节左移2位的结果作为第一中间结果;
步骤402:将解码容器中的第一字节右移4位,然后再和00000011进行与运算,将与运算的结果作为第二中间结果;
步骤403:将第一中间结果和第二中间结果进行或运算,将或运算结果存入解码缓存区中当前起始位置开始的第一字节上;
步骤404:将解码容器中的第二字节左移4位的结果作为第三中间结果;
步骤405:将解码容器中的第三字节右移2位,再和00001111进行与运算,将与运算的结果作为第四中间结果;
步骤406:将第三中间结果和第四中间结果进行或运算,并将或运算的结果存入解码缓存区中当前起始位置开始的第二字节上;
步骤407:将解码容器中的第三字节左移6位,结果作为第五中间结果;
步骤408:将解码容器中的第四字节与00111111进行与运算,将与运算的结果作为第六中间结果;
步骤409:将第五中间结果和第六中间结果进行或运算,并将或运算的结果存入解码缓存区中当前起始位置开始的第三字节上;
在本实施例中,步骤401-步骤403、步骤404-步骤406、步骤407-步骤409可以分别单独执行,三者的先后顺序可以任意调换,即先执行步骤407-步骤409,在执行步骤401-步骤403、步骤404-步骤406都可以实现;上述步骤中的或运算也可用相加运算来代替。
实施例六
本发明实施例六提供一种对解码容器中的数据进行解码的实现方法,预先申请一个4个字节的整型变量,如图6所示,本实施例的方法包括:
步骤501:将整型变量的值更新为自身左移6位的值;
在本实施例中,整型变量的初始值为0;
步骤502:将解码容器中的第一字节与00111111进行与运算,再与整型变量的值进行或运算,并用或运算的结果替换整型变量的值;
步骤503:将整型变量的值更新为自身左移6位的值;
步骤504:将解码容器中的第二字节与00111111进行与运算,再将与运算的结果与整型变量的值进行或运算,并用或运算的结果替换整型变量的值;
步骤505:将整型变量的值更新为自身左移6位的值;
步骤506:将解码容器中的第三字节与00111111进行与运算,将与运算的结果与整型变量的值进行或运算,并用或运算的结果替换整型变量的值;
步骤507:将整型变量的值更新为自身左移6位的值;
步骤508:将解码容器中的第四字节与00111111进行与运算,将与运算的结果与整型变量的值进行或运算,并用或运算的结果替换整型变量的值;
步骤509:将整型变量的值右移16位,将位移结果的低8位存入解码缓存区中当前起始位置开始的第一字节上;
步骤510:将整型变量的值右移8位,将位移结果的低8位存入解码缓存区中当前起始位置开始的第二字节上;
步骤511:将整型变量的值的低8位存入解码缓存区中当前起始位置开始的第三字节上;
其中,本实施例中的步骤509、510、511的先后顺序可以任意调换;上述步骤中的或运算也可用相加运算来代替。
实施例七
本发明实施例七提供一种对解码容器中的数据进行解码的实现方法,预先申请一个4个字节的整型变量,如图7所示,本实施例的方法包括:
步骤601:将整型变量初始化为0;
步骤602:将解码容器的第一字节与00111111进行与运算,将与运算的结果左移18位,将移位后的结果与整型变量的值进行或运算,用或运算的结果替换整型变量的值;
步骤603:将解码容器的第二字节与00111111进行与运算,将与运算的结果左移12位,将移位后的结果与整型变量的值进行或运算,用或运算的结果替换整型变量的值;
步骤604:将解码容器的第三字节与00111111进行与运算,将与运算的结果左移6位,将移位后的结果与整型变量的值进行或运算,用或运算的结果替换整型变量的值;
步骤605:将解码容器的第四字节与00111111进行与运算,将与运算的结果与整型变量的值进行或运算,用或运算的结果替换整型变量的值;
步骤606:将整型变量的值右移16位,将位移结果的低8位存入解码缓存区中当前起始位置开始的第一字节上;
步骤607:将整型变量的值右移8位,将位移结果的低8位存入解码缓存区中当前起始位置开始的第二字节上;
步骤608:将整型变量的值的低8位存入解码缓存区中当前起始位置开始的第三字节上;
在本实施中,步骤602、603、604、605的先后顺序可以任意调换;步骤606、607、608的先后顺序可以任意调换;上述步骤中的或运算也可用相加运算来代替。
实施例八
本发明实施例八提供一种对解码容器中的数据进行解码的实现方法,预先申请五个整型变量,分别为:第一整型变量、第二整型变量、第三整型变量、第四整型变量、第五整型变量,长度均为4个字节,如图8所示,本实施例的方法包括:
步骤701:将第一整型变量初始化为0;
步骤702:将解码容器的第一字节与00111111进行与运算,将与运算的结果替换第一整型变量的值;将第一整型变量的值更新为自身左移18位后的值;
步骤703:将第二整型变量初始化为0;
步骤704:将解码容器的第二字节与00111111进行与运算,将与运算的结果替换第二整型变量的值;将第二整型变量的值更新为自身左移12位后的值;
步骤705:将第三整型变量初始化0;
步骤706:将解码容器的第三字节与00111111进行与运算,将与运算的结果替换第三整型变量的值;将第三整型变量的值更新为自身左移6位后的值;
步骤707:将第四整型变量初始化0;
步骤708:将解码容器的第四字节与00111111进行与运算,将与运算的结果替换第四整型变量的值;
步骤709:将第一整型变量的值、第二整型变量的值、第三整型变量的值、第四整型变量的值进行或运算,并将或运算的结果替换第五整型变量的值;
步骤710:将第五整型变量的值右移16位,将位移结果的低8位存入解码缓存区中当前起始位置开始的第一字节上;
步骤711:将第五整型变量的值右移8位,将位移结果的低8位存入解码缓存区中当前起始位置开始的第二字节上;
步骤712:将第五整型变量的值的低8位存入解码缓存区中当前起始位置开始的第三字节上;
在本实施例中,步骤701-步骤702、步骤703-步骤704、步骤705-步骤706、步骤707-步骤708四者的先后顺序可以任意调换;但是均需在步骤709前面;步骤710、711、712之间的顺序可以任意调换;上述步骤中的或运算也可用相加运算来代替。
实施例九
本发明是实施例九提供一种对解码容器中的4个字节数据依次检查,获得分组解码字节数,并对解码缓存区的字节进行替换的实现方法,即此实施例是实施例一的步骤S5中的解码实现、实施例二的步骤114、实施例三的步骤216、实施例四的步骤315的细化实现方法,如图9和图10所示,该方法包括:
步骤801:将分组解码字节数初始化为0;
步骤802:将错位信息标识初始化为0;
例如,在本实施例中,错位信息标识为00000000B;
步骤803:判断解码容器的存量,如为1时则执行步骤804,如为2则执行步骤807,如为3则执行步骤810,如为4则执行步骤823;
步骤804:判断第一标识是否置位,是则执行步骤805,否则本流程结束;
在本实施例中,第一标识的初始状态为复位,用于标识上一个分组最后不是以单个结尾标记结束的,如上一个分组最后是以单个结尾标记结束的则置位;
步骤805:判断解码容器的第一字节数据是否与结尾字符匹配,是则执行步骤806,否则本流程结束;
步骤806:在错位信息标识中添加错位值为1,本流程结束;
在本实施例中,在错位信息标识中添加错位值为1具体为:用错位信息标识的值与00000001做或运算,用或运算的结果替换错位信息标识的值;例如,步骤806之前错位信息标识为00000000B,执行完步骤806之后错位信息标识为00000001B;
步骤807:判断解码容器的第一字节数据是否与结尾字符匹配,是则执行步骤808,否则本流程结束;
步骤808:判断解码容器的第二字节数据是否与结尾字符匹配,是执行步骤809,否则本流程结束;
步骤809:在错位信息标识中添加错位值为2,本流程结束;
在本实施例中,在错位信息标识中添加错位值为2具体为:用错位信息标识的值与00000010做或运算,用或运算的结果替换错位信息标识的值;例如,步骤809之前的错位信息标识为00000001B,则执行完步骤809之后错位信息标识为00000011B;
步骤810:判断解码容器的第一字节数据是否与结尾字符匹配,是则执行步骤811,否则执行步骤813;
步骤811:判断解码容器的第二字节数据是否与结尾字符匹配,是则执行步骤812,否则本流程结束;
步骤812:在错位信息标识中添加错位值为2,本流程结束;
本实施例中的步骤812与步骤809的实现过程相同,在此不再赘述;
步骤813:判断解码容器的第一字节是否为无效标记,是则执行步骤814,否则执行步骤815;
步骤814:将解码缓存区中当前起始位置开始的第一字节数据替换为预设非法替换符,执行步骤815;
步骤815:判断解码容器的第二字节数据是否与结尾字符匹配,是则执行步骤818,否则执行步骤816;
步骤816:判断解码容器的第二字节是否为无效标记,是则执行步骤817,否则执行步骤818;
步骤817:将解码缓存区中当前起始位置开始的第一字节数据和第二字节数据替换为预设非法替换符,执行步骤818;
步骤818:判断解码容器的第三字节数据是否与结尾字符匹配,是则执行步骤819,否则执行步骤820;
步骤819:在错位信息标识中添加错位值为3,执行步骤822;
在本实施例中,在错位信息标识中添加错位值为3具体为:用错位信息标识的值与00000100做或操作,用或运算的结果替换错位信息标识的值;
例如,步骤809之前的错位信息标识为00000011B,则执行完步骤809之后错位信息标识为00000111B;
例如,步骤809之前的错位信息标识为00000000B,则执行完步骤809之后错位信息标识为00000100B;
步骤820:判断解码容器的第三字节是否为无效标记,是则执行步骤821,否则执行步骤822;
步骤821:将解码缓存区中当前起始位置开始的第二字节数据和第三字节数据替换为预设非法替换符,本流程结束;
步骤822:将分组解码字节数设为1,本流程结束;
步骤823:判断解码容器的第一字节数据是否与结尾字符匹配或为无效值,是则执行步骤824,否则执行步骤825;
步骤824:将解码缓存区中当前起始位置开始的第一字节数据替换为预设非法替换符,执行步骤825;
步骤825:判断解码容器的第二字节数据是否与结尾字符匹配或为无效值,是则执行步骤826,否则执行步骤827;
步骤826:将解码缓存区中当前起始位置开始的第一字节数据和第二字节数据替换为预设非法替换符,执行步骤827;
步骤827:判断编码剩余长度是否大于0,是则执行步骤828,否则执行步骤829;
步骤828:判断是否要求强制解码到编码结尾,是则执行步骤836,否则执行步骤829;
在本实施例中,判断强制解码标识是否置位,是则要求强制解码到编码结尾,否则不要求强制解码到编码结尾;强制解码标识用户预先指定解码是否强制解码到结尾,即解码遇到结尾标记但是并没有到达编码的指定长度末尾,是否仍然继续解码,直到解码到指定长度的末尾才结束;
步骤829:判断解码容器的第三字节数据是否与结尾字符匹配,是则执行步骤830,否则执行步骤831;
步骤830:将分组解码字节数设为1,本流程结束;
步骤831:判断解码容器的第三字节是否为无效标记,是则执行步骤832,否则执行步骤833;
步骤832:将解码缓存区中当前起始位置开始的第二字节数据和第三字节数据替换为预设非法替换符,执行步骤833;
步骤833:判断解码容器的第四字节数据是否与结尾字符匹配,是则执行步骤835,否则执行步骤834;
步骤834:将解码缓存区中当前起始位置开始的第二字节数据和第三字节数据替换为预设非法替换符,执行步骤835;
步骤835:将分组解码字节数设为2,本流程结束;
步骤836:判断解码容器的第三字节数据是否与结尾字符匹配或无效值,是则执行步骤837,否则执行步骤838;
步骤837:将解码缓存区中当前起始位置开始的第二字节数据和第三字节数据替换为预设非法替换符,执行步骤838;
步骤838:判断解码容器的第四字节数据是否与结尾字符匹配,是则执行步骤839,否则执行步骤841;
步骤839:判断编码文本数据长度是否等于1,是则执行步骤840,否则执行步骤841;
步骤840:将第一标识置位,执行步骤844;
步骤841:将第一标识复位,执行步骤842;
步骤842:判断解码容器的第四字节是否与结尾字符匹配或为无效值,是则执行步骤843,否则执行步骤844;
步骤843:将解码缓存区中当前起始位置开始的第二字节数据和第三字节数据替换为预设非法替换符,执行步骤844;
步骤844:将分组解码字节数设为3,本流程结束。
在本发明的实施例中,如在解码结束后需要获取错位信息,则按照下述方法进行实现;
(1)判断错位信息标识的值是否为0,是则提示没有错位或无法确定错位;否则执行(2);
(2)用错位信息标识的值与000000001做与运算,判断与运算的结果是否等于0,是则提示错位信息包含1,执行(3),否则提示错位信息不包含1,执行(3);
(3)用错位信息标识的值与00000010做与运算,判断与运算的结果是否等于0,是则提示错位信息包含2,执行(4);否则提示错位信息不包含2,执行(4);
(4)用错位信息标识的值与00000100做与运算,判断与运算的结果是否等于0,是则提示错位信息包含3,否则提示错位信息不包含3;
在本实施例中,通过错位信息标识可以告知用户错误或者非法编码的具体位置,用户在下次解码时可调整解码起始位置。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (25)
1.一种基于base64编码的解码扩展实现方法,其特征在于,包括:
步骤S1:接收编码文本数据;
步骤S2:按照预设长度对所述编码文本数据进行分组,并判断最后一个数据组是否完整,是则执行步骤S4,否则执行步骤S3;
步骤S3:在所述最后一个数据组中补非正常数据使其完整,执行步骤S4;
步骤S4:将第一个数据组作为当前解码数据组;
步骤S5:根据当前解码数据组获取初步解码字节数据组,并对所述初步解码字节数据组进行解码得到解码结果;
步骤S6:对当前解码数据组进行检查,获得分组解码字节数,并用预设非法替换符替换所述解码结果中的错误数据;
步骤S7:根据所述分组解码字节数更新解码长度,所述解码长度初始值为0;
步骤S8:判断所有的数据组是否都解码完成,是则执行步骤S9,否则将下一个数据组作为当前解码数据组,返回步骤S5;
步骤S9:返回所述解码长度,解码结束;
所述步骤S5中根据当前解码数据组获取初步解码字节数据组,具体为:
步骤P1:分别用当前解码数据组中的每个字节与base64编码表中的字符进行比较,判断能否找到匹配的字符,是则将匹配字符的序号作为对应的初步解码字节数据,执行步骤P4,否则执行步骤P2;
步骤P2:分别判断当前解码数据组中的每个字节是否与预设字符匹配,是则将所述编码文本数据中的当前解码字节数据忽略,返回步骤S2,否则执行步骤P3;
步骤P3:分别判断当前解码数据组中的每个字节是否与结尾字符匹配,是则将与结尾字符对应的结尾标记作为对应的初步解码字节数据,执行步骤P4,否则用无效标记作为对应的初步解码字节数据,执行步骤P4;
步骤P4:用所述当前解码数据组中的每个字节所对应的初步解码字节数据组成初步解码字节数据组。
2.如权利要求1所述的方法,其特征在于,在所述步骤S5之前还包括:分别判断当前解码数据组中的每个字节是否大于预设值,是则用无效标记作为对应字节的初步解码字节数据,否则执行步骤S5。
3.如权利要求2所述的方法,其特征在于,在所述步骤S5中对所述初步解码字节数据组进行解码得到解码结果之前还包括:判断所述初步解码字节数据组中是否有可忽略的数据,是则删除所述编码文本数据中的对应的字符,执行步骤S2,否则继续。
4.如权利要求3所述的方法,其特征在于,判断所述初步解码字节数据组中是否有可忽略的数据,具体为:依次判断初步解码字节数据组中的初步解码字节数据是否为预设值,是则有可忽略数据,否则没有可忽略数据。
5.如权利要求1所述的方法,其特征在于,所述步骤S2还包括:计算所述编码文本数据的长度;
所述判断最后一个数据组是否完整,具体为:判断所述编码文本数据的长度是否为预设长度的整数倍,是则最后一个数据组完整,否则最后一个数据组不完整。
6.如权利要求1所述的方法,其特征在于,所述预设长度为4个字节;
所述步骤S5中对所述初步解码字节数据组进行解码,包括:将所述4个字节的当前解码字节数据组转换为3字节的数据作为解码结果。
7.如权利要求6所述的方法,其特征在于,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y11:将所述当前解码字节数据组中的第一字节左移2位的结果作为第一中间结果;
步骤Y12:将所述当前解码字节数据组中的所述第一字节右移4位,然后再和00000011进行与运算,将与运算的结果作为第二中间结果;
步骤Y13:将所述第一中间结果和所述第二中间结果进行或运算,将或运算结果作为所述解码结果的第一字节数据;
步骤Y14:将所述当前解码字节数据组中的第二字节左移4位的结果作为第三中间结果;
步骤Y15:将所述当前解码字节数据组中的第三字节右移2位,再和00001111进行与运算,将与运算的结果作为第四中间结果;
步骤Y16:将所述第三中间结果和所述第四中间结果进行或运算,并将或运算的结果作为所述解码结果的第二字节数据;
步骤Y17:将所述当前解码字节数据组中的所述第三字节左移6位,结果作为第五中间结果;
步骤Y18:将所述当前解码字节数据组中的第四字节与00111111进行与运算,将与运算的结果作为第六中间结果;
步骤Y19:将所述第五中间结果和所述第六中间结果进行或运算,并将或运算的结果作为所述解码结果的第三字节数据。
8.如权利要求6所述的方法,其特征在于,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y21:将整型变量初始化为0,将所述整型变量的值更新为自身左移6位的值;
步骤Y22:将所述当前解码字节数据组中的第一字节与00111111进行与运算,再与所述整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y23:将所述整型变量的值更新为自身左移6位的值;
步骤Y24:将所述当前解码字节数据组中的第二字节与00111111进行与运算,再将与运算的结果与所述整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y25:将所述整型变量的值更新为自身左移6位的值;
步骤Y26:将所述当前解码字节数据组中的第三字节与00111111进行与运算,将与运算的结果与所述整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y27:将所述整型变量的值更新为自身左移6位的值;
步骤Y28:将所述当前解码字节数据组中的第四字节与00111111进行与运算,将与运算的结果与整型变量的值进行或运算,并用或运算的结果替换所述整型变量的值;
步骤Y29:将所述整型变量的值右移16位,将位移结果的低8位作为所述解码结果的第一字节数据;
步骤Y210:将所述整型变量的值右移8位,将位移结果的低8位作为所述解码结果的第二字节数据;
步骤Y211:将所述整型变量的值得低8位作为所述解码结果的第三字节数据。
9.如权利要求6所述的方法,其特征在于,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y31:将整型变量初始化为0;
步骤Y32:将所述当前解码字节数据组的第一字节与00111111进行与运算,将与运算的结果左移18位,将移位后的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y33:将所述当前解码字节数据组的第二字节与00111111进行与运算,将与运算的结果左移12位,将移位后的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y34:将所述当前解码字节数据组的第三字节与00111111进行与运算,将与运算的结果左移6位,将移位后的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y35:将所述当前解码字节数据组的第四字节与00111111进行与运算,将与运算的结果与所述整型变量的值进行或运算,用或运算的结果替换所述整型变量的值;
步骤Y36:将所述整型变量的值右移16位,将位移结果的低8位作为所述解码结果的第一字节数据;
步骤Y37:将所述整型变量的值右移8位,将位移结果的低8位作为所述解码结果的第二字节数据;
步骤Y38:将所述整型变量的值的低8位作为所述解码结果的第三字节数据。
10.如权利要求6所述的方法,其特征在于,所述将所述4个字节的当前解码字节数据组转换为3字节的数据,包括:
步骤Y41:将第一整型变量初始化为0;
步骤Y42:将所述当前解码字节数据组的第一字节与00111111进行与运算,将与运算的结果替换所述第一整型变量的值;将所述第一整型变量的值更新为自身左移18位后的值;
步骤Y43:将第二整型变量初始化为0;
步骤Y44:将所述当前解码字节数据组的第二字节与00111111进行与运算,将与运算的结果替换所述第二整型变量的值;将所述第二整型变量的值更新为自身左移12位后的值;
步骤Y45:将第三整型变量初始化0;
步骤Y46:将所述当前解码字节数据组的第三字节与00111111进行与运算,将与运算的结果替换所述第三整型变量的值;将所述第三整型变量的值更新为自身左移6位后的值;
步骤Y47:将第四整型变量初始化0;
步骤Y48:将所述当前解码字节数据组的第四字节与00111111进行与运算,将与运算的结果替换所述第四整型变量的值;
步骤Y49:将所述第一整型变量的值、所述第二整型变量的值、所述第三整型变量的值、所述第四整型变量的值进行或运算,并将或运算的结果替换第五整型变量的值;
步骤Y410:将所述第五整型变量的值右移16位,将位移结果的低8位作为所述解码结果的第一字节数据;
步骤Y411:将所述第五整型变量的值右移8位,将位移结果的低8位作为所述解码结果的第二字节数据;
步骤Y412:将所述第五整型变量的值的低8位作为所述解码结果的第三字节数据。
11.如权利要求6所述的方法,其特征在于,所述步骤S6具体包括:
步骤S6-1:将分组解码字节数初始化为0;
步骤S6-2:将错位信息标识初始化为0;
步骤S6-3:判断所述当前解码数据组的有效长度,如为1时则执行步骤S6-4,如为2则执行步骤S6-5,如为3则执行步骤S6-6,如为4则执行步骤S6-7;
步骤S6-4:根据所述当前解码数据组的有效长度为1的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7;
步骤S6-5:根据所述当前解码数据组的有效长度为2的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7;
步骤S6-6:根据所述当前解码数据组的有效长度为3的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7;
步骤S6-7:根据所述当前解码数据组的有效长度为4的方法对对应的初步解码字节数据组中的数据进行处理,执行步骤S7。
12.如权利要求11所述的方法,其特征在于,所述步骤S6-4包括:
步骤a1:判断第一标识是否置位,是则执行步骤a2,否则执行步骤S7;所述第一标识的初始状态为复位,用于标识上一个分组最后不是以单个结尾标记结束的,如上一个分组最后是以单个结尾标记结束的则置位;
步骤a2:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配,是则执行步骤a3,否则执行步骤S7;
步骤a3:在所述错位信息标识中添加错位值为1,执行步骤S7。
13.如权利要求12所述的方法,其特征在于,所述步骤a3具体为:用所述错位信息标识的值与00000001做或运算,用或运算的结果替换错位信息标识的值。
14.如权利要求11所述的方法,其特征在于,所述步骤S6-5包括:
步骤b1:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配,是则执行步骤b2,否则执行步骤S7;
步骤b2:判断所述初步解码字节数据组的第二字节数据是否与结尾字符匹配,是执行步骤b3,否则执行步骤S7;
步骤b3:在所述错位信息标识中添加错位值为2,执行步骤S7。
15.如权利要求14所述的方法,其特征在于,所述步骤b3具体为:用所述错位信息标识的值与00000010做或运算,用或运算的结果替换所述错位信息标识的值。
16.如权利要求11所述的方法,其特征在于,所述步骤S6-6包括:
步骤c1:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配,是则执行步骤c2,否则执行步骤c4;
步骤c2:判断所述初步解码字节数据组的第二字节数据是否与结尾字符匹配,是则执行步骤c3,否则执行步骤S7;
步骤c3:在所述错位信息标识中添加错位值为2,执行步骤S7;
步骤c4:判断所述初步解码字节数据组的第一字节是否为无效标记,是则执行步骤c5,否则执行步骤c6;
步骤c5:将所述解码结果的第一字节数据替换为预设非法替换符,执行步骤c6;
步骤c6:判断所述初步解码字节数据组的第二字节数据是否与所述结尾字符匹配,是则执行步骤c9,否则执行步骤c7;
步骤c7:判断所述初步解码字节数据组的第二字节是否为无效标记,是则执行步骤c8,否则执行步骤c9;
步骤c8:将所述解码结果的第一字节数据和第二字节数据替换为所述预设非法替换符,执行步骤c9;
步骤c9:判断所述初步解码字节数据组的第三字节数据是否与所述结尾字符匹配,是则执行步骤c10,否则执行步骤c11;
步骤c10:在所述错位信息标识中添加错位值为3,执行步骤c13;
步骤c11:判断所述初步解码字节数据组的第三字节是否为所述无效标记,是则执行步骤c12,否则执行步骤c13;
步骤c12:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤S7;
步骤c13:将所述分组解码字节数设为1,执行步骤S7。
17.如权利要求16所述的方法,其特征在于,所述步骤c3具体为:用所述错位信息标识的值与00000010做或运算,用或运算的结果替换所述错位信息标识的值;
所述步骤c10具体为:用所述错位信息标识的值与00000100做或操作,用或运算的结果替换所述错位信息标识的值。
18.如权利要求11所述的方法,其特征在于,所述步骤S6-7包括:
步骤d1:判断所述初步解码字节数据组的第一字节数据是否与结尾字符匹配或为无效标记,是则执行步骤d2,否则执行步骤d3;
步骤d2:将所述解码结果的第一字节数据替换为预设非法替换符,执行步骤d3;
步骤d3:判断所述初步解码字节数据组的第二字节数据是否与所述结尾字符匹配或为所述无效标记,是则执行步骤d4,否则执行步骤d5;
步骤d4:将所述解码结果的第一字节数据和第二字节数据替换为所述预设非法替换符,执行步骤d5;
步骤d5:判断所述编码剩余长度是否大于0,是则执行步骤d6,否则执行步骤d7;
步骤d6:判断是否要求强制解码到编码结尾,是则执行步骤d14,否则执行步骤d7;
步骤d7:判断所述初步解码字节数据组的第三字节数据是否与所述结尾字符匹配,是则执行步骤d8,否则执行步骤d9;
步骤d8:将所述分组解码字节数设为1,执行步骤S7;
步骤d9:判断所述初步解码字节数据组的第三字节是否为所述无效标记,是则执行步骤d10,否则执行步骤d11;
步骤d10:将所述解码结果的第二字节数据和第三字节数据替换为预设非法替换符,执行步骤d11;
步骤d11:判断所述初步解码字节数据组的第四字节数据是否与所述结尾字符匹配,是则执行步骤d13,否则执行步骤d12;
步骤d12:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤d13;
步骤d13:将所述分组解码字节数设为2,执行步骤S7;
步骤d14:判断所述初步解码字节数据组的第三字节数据是否与所述结尾字符匹配或为所述无效标记,是则执行步骤d15,否则执行步骤d16;
步骤d15:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤d16;
步骤d16:判断所述初步解码字节数据组的第四字节数据是否与所述结尾字符匹配,是则执行步骤d17,否则执行步骤d19;
步骤d17:判断所述最后一个数据组的有效长度是否等于1,是则执行步骤d18,否则执行步骤d19;
步骤d18:将第一标识置位,执行步骤d22;
步骤d19:将第一标识复位,执行步骤d20;
步骤d20:判断所述初步解码字节数据组的第四字节是否与所述结尾字符匹配或为所述无效标记,是则执行步骤d21,否则执行步骤d22;
步骤d21:将所述解码结果的第二字节数据和第三字节数据替换为所述预设非法替换符,执行步骤d22;
步骤d22:将所述分组解码字节数设为3,执行步骤S7。
19.如权利要求18所述的方法,其特征在于,所述步骤d6包括:判断强制解码标识是否置位,是则要求强制解码到编码结尾,否则不要求强制解码到编码结尾。
20.如权利要求11所述的方法,其特征在于,所述方法还包括获取错位信息流程,包括:
(1)判断所述错位信息标识的值是否为0,是则提示没有错位或无法确定错位;否则执行(2);
(2)用所述错位信息标识的值与000000001做与运算,判断与运算的结果是否等于0,是则提示错位信息包含1,执行(3),否则提示错位信息不包含1,执行(3);
(3)用所述错位信息标识的值与00000010做与运算,判断与运算的结果是否等于0,是则提示错位信息包含2,执行(4);否则提示错位信息不包含2,执行(4);
(4)用所述错位信息标识的值与00000100做与运算,判断与运算的结果是否等于0,是则提示错位信息包含3,否则提示错位信息不包含3。
21.如权利要求1所述的方法,其特征在于,所述对所述初步解码字节数据组进行解码,之后还包括:将所述解码结果顺序存储到解码缓存区中;
用预设非法替换符替换所述解码结果中的数据,具体为:用预设非法替换字符替换所述解码缓存区中的所述解码结果中的数据。
22.如权利要求1所述的方法,其特征在于,所述用预设非法替换符替换所述解码结果中的数据,之后还包括:将替换之后的解码结果顺序存储到解码缓存区中。
23.如权利要求21或22所述的方法,其特征在于,将解码结果顺序存储到解码缓存区中之前还包括:判断所述解码缓存区是否符合要求,是则继续,否则解码结束。
24.如权利要求23所述的方法,其特征在于,所述判断所述解码缓存区是否符合要求,具体为:
步骤T1:用所述编码文本数据的长度除以所述预设长度,判断余数是否为0,是则执行步骤T2,否则执行T3;
步骤T2:用所述编码文本数据的长度除以所述预设长度得到的商作为分组的组数,执行步骤T4;
步骤T3:用所述编码文本数据的长度除以所述预设长度得到的商再加1作为分组的组数,执行步骤T4;
步骤T4:用第一数据乘以所述分组的组数得到计算结果,判断计算结果是否小于所述解码缓存区的大小,是则所述解码缓存区符合要求,否则所述解码缓存区不符合要求。
25.如权利要求1所述的方法,其特征在于,所述步骤S7中的所述根据所述分组解码字节数更新解码长度,具体为:将所述解码长度加上所述分组解码字节数作为新的解码长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410841106.4A CN104601177B (zh) | 2014-12-30 | 2014-12-30 | 一种基于base64编码的解码扩展实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410841106.4A CN104601177B (zh) | 2014-12-30 | 2014-12-30 | 一种基于base64编码的解码扩展实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104601177A CN104601177A (zh) | 2015-05-06 |
CN104601177B true CN104601177B (zh) | 2017-08-11 |
Family
ID=53126734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410841106.4A Active CN104601177B (zh) | 2014-12-30 | 2014-12-30 | 一种基于base64编码的解码扩展实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104601177B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105607037B (zh) * | 2015-12-22 | 2018-04-17 | 镇江市高等专科学校 | 智能定位系统及信息编码方法 |
CN105740215A (zh) * | 2016-01-23 | 2016-07-06 | 北京掌阔移动传媒科技有限公司 | 一种数据通信编码和解码方法 |
CN107026711A (zh) * | 2016-12-23 | 2017-08-08 | 阿里巴巴集团控股有限公司 | Base64解码方法及装置 |
CN115037981B (zh) * | 2021-03-05 | 2024-05-31 | 奇安信科技集团股份有限公司 | 数据流的解码方法、装置、电子设备与存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1560857A (zh) * | 2004-03-11 | 2005-01-05 | 威盛电子股份有限公司 | 运用于光驱系统8-14调制的数据译码的方法与装置 |
CN1615654A (zh) * | 2002-01-24 | 2005-05-11 | 皇家飞利浦电子股份有限公司 | 流数据的错误校正 |
CN1925611A (zh) * | 1996-09-02 | 2007-03-07 | 株式会社东芝 | 编解码设备及编码/多路复用设备和解码/多路分解设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060220926A1 (en) * | 2005-03-31 | 2006-10-05 | Fujitsu Limited | Encoder and decoder |
WO2008048068A1 (en) * | 2006-10-19 | 2008-04-24 | Lg Electronics Inc. | Encoding method and apparatus and decoding method and apparatus |
-
2014
- 2014-12-30 CN CN201410841106.4A patent/CN104601177B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1925611A (zh) * | 1996-09-02 | 2007-03-07 | 株式会社东芝 | 编解码设备及编码/多路复用设备和解码/多路分解设备 |
CN1615654A (zh) * | 2002-01-24 | 2005-05-11 | 皇家飞利浦电子股份有限公司 | 流数据的错误校正 |
CN1560857A (zh) * | 2004-03-11 | 2005-01-05 | 威盛电子股份有限公司 | 运用于光驱系统8-14调制的数据译码的方法与装置 |
Non-Patent Citations (1)
Title |
---|
Java平台中Base64编码/解码算法的改进;姚峰;《计算机应用与软件》;20081231;第25卷(第12期);正文第1-2章 * |
Also Published As
Publication number | Publication date |
---|---|
CN104601177A (zh) | 2015-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104601177B (zh) | 一种基于base64编码的解码扩展实现方法 | |
CN104750477B (zh) | 一种基于标准中间过程文件的scd版本比对方法 | |
CN112100404A (zh) | 基于结构化上下文信息的知识图谱预训练方法 | |
CN105610447B (zh) | 基于lz77算法的分区编码压缩方法 | |
CN103400173A (zh) | 一种含隐私信息的二维码生成及读取方法 | |
CN1669024A (zh) | 结构化文档、尤其xml文档的编码/译码的方法和装置 | |
CN104361025B (zh) | 一种多源空间数据融合与集成的方法 | |
CN110276428A (zh) | 一种四维码编码及解码方法 | |
CN108763227A (zh) | 一种基于分块机制的机器翻译方法 | |
CN105391514B (zh) | 字符编码解码方法及装置 | |
CN115497107B (zh) | 一种基于笔画和部首分解的零样本汉字识别方法 | |
CN109522898A (zh) | 手写样本图片标注方法、装置、计算机设备及存储介质 | |
CN107679187A (zh) | 一种中文地址树的构建方法及装置 | |
JP2004536481A (ja) | 構造化文書の木構造におけるパスの符号化および復号化方法 | |
CN103310251B (zh) | Ccqr码的编码方法及译码方法 | |
CN105550535B (zh) | 一种基因字符序列快速编码为二进制序列的编码方法 | |
KR101667240B1 (ko) | 안전하고 손실 없는 데이터 압축 | |
CN114647764A (zh) | 图结构的查询方法、装置及存储介质 | |
CN106557553A (zh) | 数据匹配的方法及装置 | |
CN107944525A (zh) | 一种基于数据分割的扩大二维码容量的方法及系统 | |
CN105677718A (zh) | 文字检索方法及装置 | |
CN107564075A (zh) | 一种稠密图邻接表压缩方法 | |
CN104361309A (zh) | 条形码识别方法和设备 | |
Dix et al. | Errors between sites in restriction site mapping | |
WO2023202873A1 (en) | Methods and systems for creating and storing graph reference genomes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |