1 byte[] 与 String之间反复转换导致解密失败
现象:
String source = "待加密数据987654321";
byte[] data = source.getBytes();
byte[] encodedData = RSAUtils.encryptByPublicKey(data, publicKey);
System.out.println("加密后的数据: \r\n" + new String(encodedData));
// 直接解密数据
byte[] decodedData = RSAUtils.decryptByPrivateKey(encodedData, privateKey);
System.out.println("解密后的数据: \r\n" + new String(decodedData));
// 先将加密的数据转换String,再通过String转换为byte[],再解密
String encodedDataString = new String(encodedData);
// 报解密错误
byte[] decodedData2 = RSAUtils.decryptByPrivateKey(encodedDataString.getBytes(), privateKey);
System.out.println("解密后的数据2: \r\n" + new String(decodedData2));
分析原因:
1 由于encodedData是经过加密处理的数据,所以里面包含不可见字符,在转换为String的时候,会出现丢失。(根本原因)
2 new String(encodedData)采用的字符编码有可能是utf-8,有可能是ASCII,有的将八位解释为一个字符,有的将4个八位解释为一个字符。