Принудительное закрытие RSA-шифрования перед генерацией открытых / закрытых ключей - PullRequest
3 голосов
/ 24 марта 2012

Я пытаюсь сгенерировать мою первую пару открытого / закрытого ключа для шифрования RSA.Это мой первый раз, но, просматривая различные учебники и веб-сайт, я решил сделать это с помощью следующего кода.Хотя мой код не дает мне ошибок, он принудительно закрывается.Все опубликовано, включая мой импорт. Может ли кто-нибудь помочь мне понять, почему мой код не генерирует ключи и не выдает мне ошибки?И да, я объявил это в файле AndroidManifest.xml

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;

    public class RSA {
        public static void GenerateKeyPair() {
            try {
                KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
                kpg.initialize(4096);
                KeyPair kp = kpg.genKeyPair();

                KeyFactory fact = KeyFactory.getInstance("RSA");
                RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(),
                        RSAPublicKeySpec.class);
                RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(),
                        RSAPrivateKeySpec.class);

                saveToFile("public.key", pub.getModulus(), pub.getPublicExponent());
                saveToFile("private.key", priv.getModulus(),
                        priv.getPrivateExponent());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }

        public static void saveToFile(String fileName, BigInteger mod,
                BigInteger exp) throws Exception {
            ObjectOutputStream oout = new ObjectOutputStream(
                    new BufferedOutputStream(new FileOutputStream(fileName)));
            try {
                oout.writeObject(mod);
                oout.writeObject(exp);
            } catch (Exception e) {
                throw new Exception("error", e);
            } finally {
                oout.close();
            }
        }
    }


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.BLAH"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".UUIDActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Installation"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name=".RSA"
            android:label="@string/app_name" >
        </activity>
    </application>

</manifest>

Ответы [ 2 ]

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

@ Obliviator Когда я вижу ваш AndroidManifest, я обнаружил, что вам нужно удалить приведенный ниже код из вашего манифеста.

  <activity
        android:name=".RSA"
        android:label="@string/app_name" >
    </activity>

Поскольку этот класс не расширяется как Activity, вам необходим этот класс для GenerateKeyPair, поэтому нет необходимости объявлять этот класс в файле манифеста. А что касается этого класса Installation, этот класс также не расширяется как Activity, а затем удаляет его. После этого вы успешно пройдете.

0 голосов
/ 24 марта 2012

Я не знаю, что является причиной вашей проблемы (мы должны увидеть, где вы используете этот класс для отладки этого), но у меня есть альтернатива для вас, если вы можете включить стороннюю библиотеку. См. JSch , который может генерировать пары ключей RSA (например, для использования в аутентификации с открытым ключом SSH). Документация: http://epaul.github.com/jsch-documentation/simple.javadoc/

Метод, который вы ищете: KeyPair.genKeyPair .

...