我正在尝试以Android中的PKCS#1的形式生成RSA公钥.
这里几乎完全重复了这个问题:Generating RSA keys in PKCS#1 format in Java
但作者从未回答过.我经历了答案,但我找不到有用的东西.我得出结论(除非别人有不同的答案),必须使用Bouncy Castle来完成.我与充气城堡唯一的问题实际上是在Android中使用它.我“似乎”正确地导入了jar(我说“似乎”因为我之前从未这样做过,但它是一个相当轻松的过程而且我在Eclipse中没有错误)但是,然后我在log cat中得到一个错误.
03-25 22:25:58.780: E/AndroidRuntime(9171): java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider
解决方法:
两个可能的答案.
如果你想按照自己的方式前进,试试这个来解决NoClassDefFoundError问题.
android eclipse updated and now app crashes when it trys to run
您也可以使用JSch.我自己在Android上可靠地工作.
RSA Encryption forceclosing before generating public/private keys
编辑:这是使用JSch生成RSA类型密钥对的示例.我认为它是PKCS#1,但我对标准不够熟悉. relevant 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;
}
}
编辑:假设Eclipse.在构建路径中包含JSch jar file,最好是作为本地jar(比如在lib文件夹中).确保在“订购和导出”选项卡上进行检查.
现在刷新你的项目.