2012-03-24 3 views
3

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

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> 
+0

@Obliviator Единственное, что я проверяю в вашем вопросе, - вы говорите, что «да, я декларировал это в манифесте», это означает, что вы объявляете этот класс в манифесте, который не распространяется как действие, то он обязательно даст вам ошибку что вы публикуете в Last.So вы можете показать свой файл файла манифеста и может быть где ваш класс активности. – Herry

+0

Я опубликовал манифест –

ответ

0

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

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

0

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

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

Поскольку этот класс не распространяется, как активность, вам требуется этот класс для GenerateKeyPair поэтому нет необходимости объявлять этот класс в Manifest file.And, что об этом классе установке, этот класс также не распространяется, как активность, то удалите его также. После этого вы получите успешное выполнение.