RSA解密失败,常见原因

2025-06-04 09:03:23

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个八位解释为一个字符。

品牌简介
ps如何给字体加粗