8

尝试byte[]使用 .. 将 a 转换为 base64 字符串 org.apache.commons.codec.binary.Base64。为此,我的 java 代码如下所示:

 base64String = Base64.encodeBase64URLSafeString(myByteArray);

但我看到的是生成的base64字符串中有一些无效字符..截屏

为什么我在生成的字符串____中看到这些行?base64它是一个有效的字符串吗?请注意,生成的字符串的长度可以被 4 整除。

4

5 回答 5

3

您是否尝试过使用该encodeBase64String方法而不是使用encodeBase64URLSafeString

encodeBase64URLSafeString:

使用 base64 算法的 URL 安全变体对二进制数据进行编码,但不分块输出。url-safe 变体发出 - 和 _ 而不是 + 和 / 字符。

encodeBase64String:

使用 base64 算法对二进制数据进行编码,但不对输出进行分块。注意:我们将此方法的行为从多行分块 (commons-codec-1.4) 更改为单行非分块 (commons-codec-1.5)。

来源:org.apache.commons.codec.binary.Base64 javadoc

于 2014-03-10T14:12:17.600 回答
2

利用

String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk); 
于 2016-04-01T17:24:58.227 回答
1

这可能会有所帮助

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
encoder.encode(byteArray);
于 2012-07-23T12:52:12.570 回答
0

你有(至少)两种风格的 base64,除了字母数字字符之外,原始的一种使用 '+' 和 '/',而“url 安全”的一种,使用“-”和“_”,以便内容可以包含在 URL 中(或用作文件名,顺便说一句)。

看起来您正在使用已转换为“url 安全模式”的 base64 编码器。

apache 的 URLSafeString() 的 javadoc

哦,'_'作为 base64 字母表的最后一个字符,看到字符串"____"意味着你一直在编码 0xffffff ... 的块,就像看到“AAAAAA”意味着有很多连续的零一样。

如果您想确信这是正常情况,只需选择您最喜欢的十六进制转储器/编辑器并检查您的二进制输入的样子。

于 2012-07-23T12:52:49.280 回答
-1

通过以下过程,您可以将字节数组转换为 Base64

 // Convert a byte array to base64 string
    byte[] bytearray= new byte[]{0x12, 0x23};
    String s = new sun.misc.BASE64Encoder().encode(bytearray);

    // Convert base64 string to a byte array
    bytearray = new sun.misc.BASE64Decoder().decodeBuffer(s);

编辑:

请查看以下链接commons apache的指南

于 2012-07-23T12:53:20.417 回答