繁体   English   中英

Apache通用base64解码和Sun base64解码

[英]Apache commons base64 decode and Sun base64 decode

byte[] commonsDecode = Base64.decodeBase64(data);
debug("The data is " + commonsDecode.length + " bytes long for the apache commons base64 decoder.");
BASE64Decoder decoder = new BASE64Decoder();
byte[] sunDecode = decoder.decodeBuffer(data);
Log.debug("The data is " + sunDecode.length + " bytes long for the SUN base64 decoder.");

请解释为什么这两个方法调用会为生成的字节数组生成不同的长度。 我最初认为它可能与字符编码有关,但如果是这样,我不能正确理解所有问题。 上述代码按照上面显示的顺序在同一系统和同一应用程序中执行。 因此该系统上的默认字符编码将是相同的。

输入(测试)数据:下面是Java String的System.out.println。

qFkIQgDq jk3ScHpqx8BPVS97YE4pP/nBl5Qw7mBnpSGqNqSdGIkLPVod0pBl Uz7NgpizHDicGzNCaauefAdwGklpPr0YdwCu4wRkwyAuvtDmL0BYASOn2tDw72LMz5FChtSa0CoCBQ2ARsFG2GdflnIWsUuBQapX73ZBMiqqm  ZCOnMRv9Ol8zT1TECddlKZMYAvmjANgq0sBPyUMF7co XY9BYAjV3L/cA8CGQpXGdrsAgjPKMhzk4hh1GAoQ1soX2Dva8p3erPJ4sy2Vcb6lS1Hap9FR0AZFawbJ10FFSTg10wxc24539kYA6xxq/TFqkhaEoSyTqjXjvo1SA==

Apache commons解码器说它是252个长度的字节数组。 Java Sun解码器说256。

解码数据无效Base64数据。

有效的Base64数据可以包含空格。 通常,它每72个字符有一个换行符。 但是,您的数据包含随机位置的空格。 如果它们被删除(因为每个Base64解码器应该这样做),仍然有339个字符。 但是,有效的Base64数据必须是4个字符的倍数。

有趣的是,您的数据不包含加号。 我怀疑它曾经包含它们但它们可能已经被传输中的某个空间所取代。 如果用加号替换所有空格,则Base64数据有效,解码数据的长度为256字节:344个字符/ 4 * 3 - 2个填充字符。

我进一步怀疑Base64数据是在没有正确URL编码的URL中使用的。 这是失踪加号的可能原因。 请注意,Base64编码数据不是URL安全的。 加号和等号都需要转义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM