java – 在Android中以PKCS#1格式在Android中生成RSA密钥

我正在尝试以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文件夹中).确保在“订购和导出”选项卡上进行检查.

现在刷新你的项目.

上一篇:android自定义视图错误:android.view.InflateException


下一篇:android – 如何将logcat添加到ACRA