【发布时间】:2014-12-07 19:27:19
【问题描述】:
我有一个在我的 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;
有人知道怎么做吗?自一周以来,我一直试图弄清楚这一点,但没有找到答案。
【问题讨论】:
-
这里是什么?堆栈跟踪来自哪里,服务器还是 android 客户端?那么你展示的代码,服务器端还是客户端呢?
标签: java android encryption cross-platform bouncycastle