EGH*_*HDK 4 java android rsa bouncycastle logcat
我正在尝试以Android中的PKCS#1的形式生成RSA公钥.
这里几乎完全重复了这个问题:用Java生成PKCS#1格式的RSA密钥
但作者从未回答过.我经历了答案,但我找不到有用的东西.我得出结论(除非别人有不同的答案),必须使用Bouncy Castle来完成.我与充气城堡唯一的问题实际上是在Android中使用它.我"似乎"正确地导入了jar(我说"似乎"因为我之前从未这样做过,但它是一个相当轻松的过程而且我在Eclipse中没有错误)但是,然后我在log cat中得到一个错误.
03-25 22:25:58.780: E/AndroidRuntime(9171): java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider
Run Code Online (Sandbox Code Playgroud)
两个可能的答案.
如果你想按照自己的方式前进,试试这个来解决问题吧NoClassDefFoundError.
android eclipse已更新,现在应用程序在尝试运行时崩溃
您也可以使用JSch.我自己在Android上可靠地工作. RSA加密在生成公钥/私钥之前强制关闭
编辑:这是使用JSch生成RSA类型密钥对的示例.我认为它是PKCS#1,但我对标准不够熟悉.在相关的javadoc就是我要过的.
/**
* Load or generate a RSA keypair to use as a client for the given JSch.
*/
public boolean registerKeyPair(JSch jSch) {
new File(getRootFolder().getAbsolutePath() + "/.ssh").mkdirs();
File privateKey = new File(getRootFolder().getAbsolutePath() + "/.ssh/id_rsa");
File publicKey = new File(getRootFolder().getAbsolutePath() + "/.ssh/id_rsa.pub");
if (!privateKey.exists() || !publicKey.exists()) {
try {
KeyPair keyPair = KeyPair.genKeyPair(jSch, KeyPair.RSA);
keyPair.writePrivateKey(privateKey.getAbsolutePath());
keyPair.writePublicKey(publicKey.getAbsolutePath(), "Machine Shop");
return true;
} catch (JSchException e) {
Log.e("genKeyPair(RSA)", Log.getStackTraceString(e));
} catch (FileNotFoundException e) {
Log.e("genKeyPair(RSA)", Log.getStackTraceString(e));
} catch (IOException e) {
Log.e("genKeyPair(RSA)", Log.getStackTraceString(e));
}
return false;
}
try {
jSch.addIdentity(privateKey.getAbsolutePath());
return true;
} catch (JSchException e) {
Log.w("jSch.addIdentity", Log.getStackTraceString(e));
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:假设Eclipse.在构建路径中包含JSch jar文件,最好是作为本地jar(比如在lib文件夹中).确保在"订购和导出"选项卡上进行检查.
现在刷新你的项目.