【问题标题】:Diffrence Between Android encryption and normal Java Applications (.jar) encryptionAndroid 加密和普通 Java 应用程序 (.jar) 加密之间的区别
【发布时间】: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


【解决方案1】:

您正在使用序列化,只有在您的实现完全相同时才会起作用。您不应该使用序列化,而是使用RSAPublicKey.getEncoded()。这应该返回更规范的密钥表示形式,可以使用 X509EncodedKeySpecKeyFactory 再次检索到 "RSA" 密钥。

【讨论】:

  • 请注意,如果您不能信任公钥,非对称加密将毫无用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2012-07-02
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多