在写一个C/S结构的系统,C端用的是C++,AES和Base64用的是开源的非官方库。S端用的是Java,AES依靠官方的javax.crypto.Cipher实现,Base64依靠sun.misc实现。
在加密一个比较长的字符串时,出现了这样一种情况
C++代码
C++逐字符输出密文
java代码
public static void main(String[] args) throws Exception {
String content = "download;D:\\CLion_workspace\\http\\httplib_example1\\client\\xor.cpp";
// 加密
String encryptResult = encrypt(content);
for (int i=0; i < encryptResult.length(); i++) {
System.out.println(encryptResult.charAt(i));
}
// 解密
String decryptResult = decrypt(encryptResult);
}
java输出
逐字符输出时就可以清楚的看到,java的官方库在加密后,会额外添加一个换行符
这是因为
所以保险起见,无论用的是否是官方库,用Base64编码成字符串后都进行一下去换行符的操作。
return new BASE64Encoder().encode(encryptedData).replaceAll("[\\s*\t\n\r]", "");