用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();
}
}