加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

无法解密服务器上的RSA加密内容(通过客户端)

发布时间:2022-10-20 14:32:25 所属栏目:安全 来源:未知
导读: 我们有一个客户机-服务器系统,其中client(Android phone)和server(spring)都使用java.security.KeyFactory来获取java.security.KeyFactory的实例,如下所示:
KeyFactory factory = Ke

我们有一个客户机-服务器系统,其中client(Android phone)和server(spring)都使用java.security.KeyFactory来获取java.security.KeyFactory的实例,如下所示:

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

但是如果我们这样做,当我们使用这个工厂加密数据时,服务器会给出不同的输出,而客户机会给出不同的输出。当我们检查提供者时,它是为服务器而来的sunrsassign,为客户端而来的OpenSSLRSA。因此,我们尝试使用以下方法在客户端上设置相同的值:

KeyFactory factory = KeyFactory.getInstance("RSA", "SunRsaSign");

但是我们得到了java.security.NoSuchProviderException错误。同样,当我们试图在服务器上设置OpenSSLRSA时服务器内容加密,它们也会面临同样的错误。

要加密的完整代码在服务器和客户端上是相同的,如下所示:

String pubKey = ""
byte[] keyData = DatatypeConverter.parseHexBinary(pubKey);
System.out.println("key data" + Arrays.toString(keyData));
KeyFactory factory = KeyFactory.getInstance("RSA");
//System.out.println("provide = " + factory.getProvider());
PublicKey pub = factory.generatePublic(new X509EncodedKeySpec(keyData));
Cipher encryptCipher = Cipher.getInstance("RSA");
encryptCipher.init(Cipher.ENCRYPT_MODE, pub);
byte[] secretMessageBytes = msg.getBytes(StandardCharsets.UTF_8);
System.out.println("secret msg" +Arrays.toString(secretMessageBytes));
byte[] encryptedMessageBytes = encryptCipher.doFinal(secretMessageBytes);
System.out.println("enc data" +Arrays.toString(encryptedMessageBytes));

生成的encryptedMessageBytes不同。这是个问题。我认为这是因为不同的提供商被不同的平台使用。

有没有人能帮我设置KeyFactory的提供程序或者删除解密错误?

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!