2014-12-07 69 views
0

我的Windows PC和Android應用程序上運行了java服務器。這兩個應該溝通編碼。所以我使用「RSA」算法以不對稱方式進行通信。但它沒有工作,所以我用Bouncy Castle作爲我的提供者。仍然相同問題:Android加密和普通Java應用程序(.jar)加密之間的區別

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) 

服務器想要使用應用程序中的Publickey編碼一些數據。

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; 

有人知道如何做到這一點嗎?我試圖找出這一點,因爲一個星期沒有找到答案。

+1

這是什麼?服務器或Android客戶端的堆棧跟蹤在哪裏?那麼你顯示的代碼,服務器或客戶端呢? – 2014-12-07 23:23:38

回答

0

您正在使用序列化,這隻有在您的實現完全一樣時纔會起作用。您不應該使用序列化,而應使用RSAPublicKey.getEncoded()。這應該返回一個更加規範的密鑰表示,可以使用X509EncodedKeySpecKeyFactory"RSA"鍵進行重新檢索。

+0

請注意,如果您不能*信任公鑰,則非對稱加密是無用的。 – 2014-12-08 03:15:47