I´ve got a java Server running on my Windows PC and an Android App. These two shall communicate encoded. So i used the "RSA" algorithm to cummunicate on the asymmetric way. But it didnt work so I used Bouncy Castle as my provider. Still same Problem:
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)
The server wants to encode some data with the Publickey from the App.
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;
Does somebody know how to do this ? Im trying to figure this out since one week and didnt find an answer.
You are using serialization, which will only work if your implementations are as good as identical. You should not use serialization, use RSAPublicKey.getEncoded()
instead. This should return a more canonical representation of the key, which can be retrieved again using X509EncodedKeySpec
and a KeyFactory
for "RSA"
keys.