Android加密与普通Java应用程序(.jar)加密的区别

Android加密与普通Java应用程序(.jar)加密的区别,java,android,encryption,cross-platform,bouncycastle,Java,Android,Encryption,Cross Platform,Bouncycastle,我有一台运行在Windows PC上的java服务器和一个Android应用程序。这两个将进行编码通信。因此,我使用RSA算法以非对称方式进行通信。但它不起作用,所以我用Bouncy Castle作为我的供应商。还是同样的问题: java.lang.ClassNotFoundException: com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPublicKey at java.net.URLClassLoader

我有一台运行在Windows PC上的java服务器和一个Android应用程序。这两个将进行编码通信。因此,我使用RSA算法以非对称方式进行通信。但它不起作用,所以我用Bouncy Castle作为我的供应商。还是同样的问题:

java.lang.ClassNotFoundException: com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPublicKey
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:344)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:626)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at ServerRIL_Android.VerschlüsselungRSA.Verschlüsseln(VerschlüsselungRSA.java:194)
at ServerRIL_Android.SchlüsselAust.Register(SchlüsselAust.java:230)
at ServerRIL_Android.Anmeldung.LeseDaten(Anmeldung.java:61)
服务器希望使用应用程序中的公钥对某些数据进行编码

   byte[] verschlüsselt = new byte[0];
    byte[] s = new byte[0];
    try{

    ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));
    final PublicKey publicKey = (PublicKey) inputStream.readObject();
   s =  encrypt(zuVerschlüsseln, publicKey);
        verschlüsselt = s;
    }
    catch(Exception e)
    {
        System.out.println(e + "-verschlüsseln");
        e.printStackTrace();
    }
    return verschlüsselt;

有人知道怎么做吗?一个星期以来,我一直在想这个问题,但没有找到答案

您正在使用序列化,只有在您的实现完全相同的情况下,序列化才会起作用。不应使用序列化,而应使用RSAPublicKey.getEncoded。这将返回密钥的更规范的表示形式,可以使用X509EncodedKeySpec和RSA密钥的KeyFactory再次检索该密钥。

这里是什么?stacktrace从哪里来,服务器还是android客户端?那么您展示的代码呢,服务器还是客户端?请注意,如果您不能信任公钥,那么非对称加密是非常无用的。