Генерация ключей RSA в Android в формате PKCS # 1 в Android - PullRequest
4 голосов
/ 26 марта 2012

Я пытаюсь сгенерировать открытый ключ RSA в виде PKCS # 1 в Android.

Здесь почти точная копия этого вопроса: Генерация ключей RSA в формате PKCS # 1 в Java

Автор так и не ответил с ответом. Я прошел через ответы, но я не смог найти то, что работает. Я пришел к выводу (если у кого-то еще нет другого ответа), что это должно быть сделано с помощью Bouncy Castle. Единственная проблема, которую я испытываю с надувным замком, - это использование его в Android. Я «похоже» правильно импортировал банку (я говорю «кажется», потому что я никогда не делал этого раньше, но это был довольно безболезненный процесс, и я не получаю ошибок в Eclipse), но затем я получаю сообщение об ошибке в log cat .

03-25 22:25:58.780: E/AndroidRuntime(9171): java.lang.NoClassDefFoundError: org.bouncycastle.jce.provider.BouncyCastleProvider

1 Ответ

5 голосов
/ 26 марта 2012

Два возможных ответа.

Если вы хотите идти по пути, попробуйте это, чтобы решить 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;           
    }

}

Редактировать: Предполагая Eclipse.Включите файл JSch jar в путь сборки, желательно в качестве локального jar (скажем, в папке lib).Обязательно проверьте его на вкладке «Заказ и экспорт».

Теперь обновите ваш проект.

...