最初的回答:目前我正在进行一项学校项目。该项目的目标是从服务器接收数据并将数据写入服务器。为此,我使用套接字和服务器套接字。为了加密消息,我使用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行)时,会出现错误。
客户端具有相同的功能,但他接收并发送一个对象。
错误信息
最初的回答
:此错误发生在将对象强制转换为公钥(第108行)时。客户端具有相同的功能,但它接收并发送一个对象。请检查代码以解决此问题。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吗? 问题出在哪里?
感谢您的帮助。 RT