背景描述:
在本地环境中使用 IDEA 进行开发时功能正常,但在测试服务器上运行时出现异常。通过开启 IDEA 的远程调试功能,对私钥解密过程进行分析,得到如下结果:
?F:?>~??C?x?,\?!???
?B?I?? ?
?P???x??\?P??(??admin@123
从返回结果可以看出,解密后的字符串开头包含大量非预期的乱码字符。
问题排查过程:
经过分析发现,问题源于私钥解密时所使用的 Cipher 实例采用了默认的加密算法配置。具体代码为:
Cipher cipher = Cipher.getInstance("RSA");
该写法未明确指定填充模式(Padding),导致不同运行环境(如本地与服务器)可能因默认安全提供者差异而产生不一致的行为。
解决方案:
显式指定标准的填充方式,确保跨环境一致性。修改代码如下:
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
此配置明确使用 RSA 算法、ECB 模式以及 PKCS1Padding 填充方案,并指定 Bouncy Castle 作为安全提供者,可有效避免乱码问题。
建议同时在项目的 pom.xml 中引入必要的依赖以支持 BC 提供者:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.69</version>
</dependency>

雷达卡


京公网安备 11010802022788号







