将字节数组转换为base64字符串java

时间:2012-07-23 12:45:58

标签: java base64 apache-commons

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

 base64String = Base64.encodeBase64URLSafeString(myByteArray);

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

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

5 个答案:

答案 0 :(得分:2)

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

encodeBase64URLSafeString:

  

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

encodeBase64String:

  

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

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

答案 1 :(得分:1)

这可能会有所帮助

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
encoder.encode(byteArray);

答案 2 :(得分:1)

使用

String sCert = javax.xml.bind.DatatypeConverter.printBase64Binary(pk); 

答案 3 :(得分:0)

你有(至少)两种口味的base64,原来的一个使用'+'和'/'以及字母数字字符,而“url safe”使用“ - ”和“_”所以内容可以包含在URL中(或用作文件名,顺便说一句)。

看起来您正在使用已经变为“网址安全模式”的base64编码器。

apache's javadoc for URLSafeString()

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

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

答案 4 :(得分:-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

中的指南