Java - org.apache.commons.codec.binary.Base64消除了新行字符

时间:2012-08-08 05:24:55

标签: java certificate base64

sun.misc.BASE64Encoder替换为org.apache.commons.codec.binary.Base64时,我遇到以下问题。

我正在使用X509Certificate,我需要使用Base64来编码由java.security.cert.Certificate.getEncoded()

的结果获得的字节数组

看来org.apache.commons.codec.binary.Base64sun.misc.BASE64Encoder保留新字符时消除了新的字符,请参阅下面的代码:

String certString =  Base64.encodeBase64(certificate.getEncoded());

VS

sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();          
String certString = encoder.encode(certificate.getEncoded());

我知道有一个选项可以使用encodeBase64Chunked,但默认值是76个字符,此外还有一个选项来定义lineLength和lineSeparator但我不想使用固定长度但是要使用我的输入 - certificate.getEncoded()包括行尾字符。

1 个答案:

答案 0 :(得分:0)

试试这个:

@Test
public void testBase64() {
String str = "a string with some\n\n newlines";
try {
    // To base 64
    String base64 = javax.xml.bind.DatatypeConverter.printBase64Binary(str.getBytes("UTF8"));

    // From base 64
    byte[] clear = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64);
    String clearText = new String(clear, "UTF8");

    assertEquals(str, clearText);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    fail();
}

}