Java - org.apache.commons.codec.binary.Base64 删除换行符



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

我正在使用X509Certificate,我需要使用 Base64 对字节数组进行编码

,该数组由 java.security.cert.Certificate.getEncoded() 的结果获得

看起来org.apache.commons.codec.binary.Base64删除换行符,而sun.misc.BASE64Encoder保留它,请参阅下面的代码:

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

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

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

试试这个:

@Test
public void testBase64() {
String str = "a string with somenn 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();
}
}

相关内容

最新更新