我对 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
我希望你能理解我的问题,因为英语不是我的母语。
编辑:我发现问题不是外包代码引起的。所以我想这个话题可以标记为已解决。
最佳答案
RSAPublicKey
和 RSAPrivateKey
是接口(interface)。当您获得 Key
时,您实际上会收到此接口(interface)的加密提供程序的实现。这些提供程序因不同的 Java 平台而异(尽管至少在官方上,Android/Dalvik 甚至不是 Java 平台)。因此,除非您在同一平台上工作,否则永远不要期望序列化会起作用。
然而,在 Java 中有一些方法可以序列化公钥和私钥; Key
接口(interface)包含 getEncoded()
方法,该方法返回 key 的最常见二进制编码。对于 RSAPublicKey
,这是 X5.09 SubjectKeyIdentifier 中的 PKCS#1 编码。在 RSAPrivateKey
的情况下,这是包裹在 PKCS#1 定义结构周围的内部 PKCS#8 编码。这些可以使用 X509EncodedKeySpec
和 PKCS8EncodedKeySpec
表示,并使用 RSA KeyFactory
转换回 key 。
请注意,如果您调用 getEncoded
,私钥将不会被加密。通常您根本不想传输私钥,如果您这样做,您真的应该加密它们。您可以使用 Cipher.wrap
和 Cipher.unwrap
方法执行此操作。
关于android - 问题外包RSA加解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15501592/
对待外包的态度 外包是来钱最快的方式,通过出售自己的时间和技能换取报酬,一定程度上与上班类似。创业后一直在做自己的产品,从习惯打卡软件:加一,到灵动岛软件:Island Widgets,然后Ma
抽象测试 public abstract class AbstractTest User user; @Before public void before(){ user = new User
我有一个简单的问题,尽管我进行了所有研究和尝试,但仍无法解决。我想将一个 css 属性移出到一个文件中。在拳头下方的代码片段中元素未正确显示在第二个位置。 我的 CSS 文件: .navBarItem
我想外包 tableView 的委托(delegate)和数据源协议(protocol)。所以我创建了一个新的TableViewController,为其创建了一个Cocoa Touch Class并
我的项目团队使用具有 Maven 结构的 GWT 开发了一个浏览器游戏: 家长 应用程序接口(interface) 域名 服务 查看 GWT主要用在 View 中(除了继承 View 的其他模块),我
我的大多数应用程序都是只有一个屏幕的应用程序(由于功能原因),有时会通过“ float ”弹出窗口进行扩展,这些弹出窗口基本上是添加到主布局的相对布局(包含其他 UI 元素),保留 UI 元素主布局在
我有一个项目,里面有一个项目,我开发了一堆非常抽象的类,所以我可以在其他项目中使用它。我应该如何以某种方式外包该包,以便最终可以通过 gradle 或 IDE 包含它? 此外,可重复使用的包内容仍在开
我想知道如何分离 JavaScript 和 HTML。当然,我包括 JS: 但是当我使用 JS 动态添加 HTML 标签到网站时: $( "#content" ).append(""); 然后 J