2012-03-24 35 views
3

私はRSA暗号化のために私の最初の公開鍵/秘密鍵のペアを生成しようとしています。これは初めてのことですが、次のコードを使用して、さまざまなチュートリアルやWebサイトを調べることにしました。私のコードでエラーが出ることはありませんが、強制的に終了します。私の輸入品を含めてすべてが掲載されています。私のコードがキーを生成していないと私にエラーを出す理由を理解できるように助けてください。そして、はい、私は(私たちは、あなたがいることをデバッグするために、このクラスを使用する場所を確認する必要があると思います)あなたの問題を引き起こしているのか分からない公開鍵/秘密鍵を生成する前にRSA暗号化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

ファイルのAndroidManifest.xmlでそれを宣言しましたが、私は持っていますサードパーティのライブラリを含めることができれば、あなたの代わりになるでしょう。 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のために、このクラスのインストールについては、このクラスでもあるされ、その後の活動として拡張していないものをマニフェストfile.Andでこのクラスを宣言する必要がこのクラスを必要としませんそれを取り除いてください。それが完了すると、正常に実行されます。

関連する問題