我正在使用apache库对base64进行编码。但这次问题非常典型。我有一个b64编码的字符串。
MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB"+
"5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn
它是证书(.CER)文件的一部分。我只是解码它并再次编码它,但结果有点不同。结果字符串是,
“MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD / euDuzBjDANBgkqhkiG9w0BAQUFADA”+“/ 5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn”
差异在第一行的末尾和第二行的开头。 CB 被 A / 替换。
此更改使我的证书无效。问题出在哪里?
答案 0 :(得分:4)
问题在于您的中间字符串转换。如果你只使用字节数组,一切都很好。
public static void main(String args[]) {
String partOfCer = "MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB" + "5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn";
byte[] dec1_byte = Base64.decodeBase64(partOfCer.getBytes());
// String dec1 = new String(dec1_byte);
byte[] newBytes = Base64.encodeBase64(dec1_byte);
String newStr = new String(newBytes);
System.out.println(partOfCer);
System.out.println(newStr);
System.out.println(partOfCer.equals(newStr));
}