gpt4 book ai didi

android - 问题外包RSA加解密

转载 作者:太空宇宙 更新时间:2023-11-03 11:16:47 25 4
gpt4 key购买 nike

我对 RSA 加密和解密有疑问。我在android中开发,想外包RSA加密和解密。在我尝试外包之前,我的源代码运行良好。

我创建了私钥和公钥,分别保存为private.key和public.key。该错误是由该方法引起的 ClassNotFoundException:

public Key getPrivateKey(){
try {
InputStream fis = activity.getResources().openRawResource(R.raw.private);
ObjectInputStream ois = new ObjectInputStream(fis);
Key RSAprivateKey = (Key)ois.readObject();
return RSAprivateKey;
}
catch (FileNotFoundException e) {
Log.e("FileNotFound","FileNotFound");
e.printStackTrace();
} catch (IOException e) {
Log.e("IOEXception","IOEXception");
e.printStackTrace();
} catch (ClassNotFoundException e) {
Log.e("ClassNotFound","ClassNotFound");
Log.e("Errro", "Error: "+ e.getMessage());
Log.e("error", e.toString());
e.printStackTrace();
}
return null;
}

我查看了 logcat 并收到此错误消息:

E/ClassNotFound(1205): ClassNotFound
03-19 13:54:52.176: E/Errro(1205): Error:
com.android.org.bouncycastle.jce.provider.JCERSAPrivateCrtKey
03-19 13:54:52.176: E/error(1205): java.lang.ClassNotFoundException:
com.android.org.bouncycastle.jce.provider.JCERSAPrivateCrtKey

我希望你能理解我的问题,因为英语不是我的母语。

编辑:我发现问题不是外包代码引起的。所以我想这个话题可以标记为已解决。

最佳答案

RSAPublicKeyRSAPrivateKey 是接口(interface)。当您获得 Key 时,您实际上会收到此接口(interface)的加密提供程序的实现。这些提供程序因不同的 Java 平台而异(尽管至少在官方上,Android/Dalvik 甚至不是 Java 平台)。因此,除非您在同一平台上工作,否则永远不要期望序列化会起作用。

然而,在 Java 中有一些方法可以序列化公钥和私钥; Key 接口(interface)包含 getEncoded() 方法,该方法返回 key 的最常见二进制编码。对于 RSAPublicKey,这是 X5.09 SubjectKeyIdentifier 中的 PKCS#1 编码。在 RSAPrivateKey 的情况下,这是包裹在 PKCS#1 定义结构周围的内部 PKCS#8 编码。这些可以使用 X509EncodedKeySpecPKCS8EncodedKeySpec 表示,并使用 RSA KeyFactory 转换回 key 。

请注意,如果您调用 getEncoded,私钥将不会被加密。通常您根本不想传输私钥,如果您这样做,您真的应该加密它们。您可以使用 Cipher.wrapCipher.unwrap 方法执行此操作。

关于android - 问题外包RSA加解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15501592/

25 4 0