为什么Java不能加载这个类:com.android.org.conscrypt.OpenSSLRSAPublicKey

为什么Java不能加载这个类:com.android.org.conscrypt.OpenSSLRSAPublicKey,java,android,sockets,rsa,Java,Android,Sockets,Rsa,目前我正在做一个学校项目。此项目的目标是从服务器接收数据并将数据写入服务器。为此,我使用套接字和服务器套接字。为了加密消息,我使用ApacheCommonsCodec1.9 (服务器是在Ubuntu服务器上执行的java.jar文件,客户端是android应用程序) 服务器/客户端 要加密消息,我正在交换公钥 private void Schluesselaustausch() { try { GenerateKeys gk = new GenerateKeys(406

目前我正在做一个学校项目。此项目的目标是从服务器接收数据并将数据写入服务器。为此,我使用套接字和服务器套接字。为了加密消息,我使用ApacheCommonsCodec1.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();
    }
}
将对象强制转换为公钥时发生错误(第108行)

客户机具有相同的功能,但他正在接收然后发送一个对象

错误

还有更多

奇怪的是:如果我使用的是在PC上运行的客户机,那么一切都能正常工作。所以我发现我的服务器是用Java10编码的,但在我的Ubuntu服务器上安装了Java11。我将Java降级并再次测试。没有什么变化

我的问题

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

谢谢你的帮助。 RT

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

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


与其反序列化Java键对象,不如发送普通键

如果您想序列化/反序列化一个对象类型,您可以创建一个自定义数据类的公共jar库,这两个项目都将其作为依赖项包含。非常感谢。这完全有道理。
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)