解决JAVA非对称加密不同系统加密结果不一致的问题

2025-05-29 0 65

最近在做一个项目,需要用到非对称加密,但是出现一个很诡异的情况,本地开发环境是Windows环境,测试环境是Linux环境,出现一个问题, 那就是本地环境与开发环境同一个私钥字符串加密加密同一个信息,得到的加密结果不一样。

经过查询网络得知,这是由于填充的规则不同导致。

原来的加密的部分代码

?

1

2

3

4

5

6
byte[] keyBytes = Base64.decodeBase64(privateKey);

PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

Key privateK = keyFactory.generatePrivate(pkcs8KeySpec) ;

Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

cipher.init(Cipher.DECRYPT_MODE, privateK);

修改后的加密的部分代码

?

1

2

3

4

5

6

7
byte[] keyBytes = Base64.decodeBase64(privateKey);

PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);

Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);

// Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

cipher.init(Cipher.ENCRYPT_MODE, privateK);

因此差异部分就是Cipher cipher的获取存在差异导致不同系统下同一秘钥,同一信息加密结果不一致

补充知识:Java RSA3加密时因编码不同导致结果不同

最近遇到一个问题,使用RSA3加密及验证时候,因为我方与客户方工程的编码格式不同,导致我方使用私钥加密后,客户使用公钥解密失败。

最后问题定位到src.getBytes()代码,因我方工程使用GBK编码,src.getBytes()执行时获取默认编码为GBK(即src.getBytes("GBK")),而客户方工程使用UTF-8编码,解密执行src.getBytes()时获取默认编码为UTF-8(即src.getBytes("UTF-8"))。造成解密校验失败。

解决JAVA非对称加密不同系统加密结果不一致的问题

解决方法:加密时设置UTF-8编码格式—src.getBytes("UTF-8",如下:

解决JAVA非对称加密不同系统加密结果不一致的问题

测试(file的默认编码为GBK):

解决JAVA非对称加密不同系统加密结果不一致的问题

解决JAVA非对称加密不同系统加密结果不一致的问题

以上这篇解决JAVA非对称加密不同系统加密结果不一致的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/y4356/article/details/79658131

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 解决JAVA非对称加密不同系统加密结果不一致的问题 https://www.kuaiidc.com/116773.html

相关文章

发表评论
暂无评论