gpt4 book ai didi

java - 为什么 Java 无法加载此类 : com. android.org.conscrypt.OpenSSLRSAPublicKey

转载 作者:行者123 更新时间:2023-11-30 12:08:03 25 4
gpt4 key购买 nike

目前我正在做一个学校项目。该项目的目标是从服务器接收数据并将数据写入服务器。为此,我使用套接字和服务器套接字。为了加密消息,我使用 Apache Commons Codec 1.9。

(服务器是在Ubuntu服务器上执行的java.jar文件,客户端是android应用)

服务器/客户端

为了加密消息,我正在交换公钥。

private void Schluesselaustausch() {
try {

GenerateKeys gk = new GenerateKeys(4069);
gk.createKeys();
ServerPrivateKey = gk.getPrivateKey();

ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream());
oos.writeObject(gk.getPublicKey());
oos.flush();
ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
Object obj = ois.readObject();
ClientPublicKey = (PublicKey) obj; //Line 108

} catch (Exception e) {
e.printStackTrace();
}
}

当对象被强制转换为 PublicKey(第 108 行)时发生错误。

Client也有同样的功能,不过他是接收然后发送一个对象。

错误

java.lang.ClassNotFoundException: com.android.org.conscrypt.OpenSSLRSAPublicKey
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at java.base/java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:685)
at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1879)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1765)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2053)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1587)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
at Engine.ClientVerbindung.Schluesselaustausch(ClientVerbindung.java:108)
at Engine.ClientVerbindung.run(ClientVerbindung.java:49)

还有更多

现在到了奇怪的部分:如果我使用在 PC 上运行的客户端,一切正常。所以我发现我的服务器是用 Java 10 编码的,但在我的 Ubuntu 服务器上安装了 Java 11。我降级Java并再次测试它。什么都没有改变。

我的问题

Android 是否有错误?我必须将 java 升级到 11 吗?有什么问题?

感谢您的帮助。转发

最佳答案

您不是在发送键(一些字符串或数字值),而是通过 Object*Stream 来回发送整个 Java 对象。当您使用 PC 时,您基本上使用与服务器相同的 Java 实现,因此服务器可以反序列化此 Java 对象。如果你System.out.println服务器上接收到的对象的.getClass(),你会发现它并没有讲com.android。 ...

然而,当您从移动设备连接时,使用的是 Android Java 版本,它显然包含类 com.android.org.conscrypt.OpenSSLRSAPublicKey 的 Android 特定对象。服务器在其库中的任何位置都没有这些类定义,因此无法反序列化它们。

与其对 Java key 对象进行反序列化/序列化,不如发送普通 key 。

关于java - 为什么 Java 无法加载此类 : com. android.org.conscrypt.OpenSSLRSAPublicKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54493651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com