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

时间:2012-03-26 02:26:55

标签: java android rsa bouncycastle logcat

我试图在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

1 个答案:

答案 0 :(得分:5)

两个可能的答案。

如果您想要按照自己的方式行事,请尝试按此解决NoClassDefFoundErrorandroid 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文件夹中)。确保在“订购和导出”选项卡上进行检查。

现在刷新你的项目。