2012-04-01 2 views
2

私はJavaのコードを使用しています。これは、弾力のあるキャッスルライブラリを介して公開鍵と秘密鍵を生成します。私の問題は、Androidのデバイスで実行可能なコードに実装していることです。私のコードはRSAキーを表示していないので、私はそれをプログラミングしたのと同じようにトラブルシューティングをしています。私の疑惑はすべてのコードをtry/catchブロックに入れる方法ですが、私は本当にわかりません。 編集:下位コード弾力のある城を使用して生成するRSA鍵ペア。 Javaプログラムからコードを実行可能にする

これは、RSA公開鍵と秘密鍵を生成するJavaクラスです。

public class ClassMain { 
    public static void main(String[]args) throws Exception { 
     String ST = "Ebenezersawesome"; 
     byte[] plainText = "ST".getBytes("UTF8"); 
     // Generating RSA Key 
     System.out.println("\nStart generating RSA key"); 
     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
     keyGen.initialize(4096); 
     KeyPair key = keyGen.generateKeyPair(); 
     System.out.println("Finish generating RSA key"); 
     // 
     // Creates an RSA Cipher object (specifying the algorithm, mode, and 
     // padding). 
     Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
     // 
     // Print the provider information 
     System.out.println("\n" + cipher.getProvider().getInfo()); 
     System.out.println("\nStart encryption"); 
     // 
     // Initializes the Cipher object. 
     cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); 
     // 
     // Encrypt the plaintext using the public key 
     byte[] cipherText = cipher.doFinal(plainText); 
     System.out.println("Finish encryption: "); 
     System.out.println(new String(cipherText, "UTF8")); 
     System.out.println("\nStart decryption"); 
     // 
     // Initializes the Cipher object. 
     cipher.init(Cipher.DECRYPT_MODE, key.getPrivate()); 
     // 
     // Decrypt the ciphertext using the private key 
     byte[] newPlainText = cipher.doFinal(cipherText); 
     System.out.println("Finish decryption: "); 
     System.out.println(new String(newPlainText, "UTF8")); 
    } 
} 

これは、Androidアプリケーションでコードを表示しようとした私の試みです。 編集:コードが動作しますが、何らかの理由でtry/catchが停止し、tv3にコードが生成されません。

TextView tv1; 
    TextView tv2; 
    TextView tv3; 
    Button convert; 
    String publicKeyFilename = null; 
    String privateKeyFilename = null; 
    String ST = "Ebenezersawesome"; 

    @Override public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Log.d("Ebz", "Made it to onCreate"); 
     tv1 = (TextView) findViewById(R.id.tv1); 
     tv2 = (TextView) findViewById(R.id.tv2); 
     tv3 = (TextView) findViewById(R.id.tv3); 
     convert = (Button) findViewById(R.id.button1); 

     // tv2.setText(ST); 
     convert.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Log.d("Ebz", "Made it to onCreate"); 
       try { 
        byte[] plainText = "ST".getBytes("UTF8"); 
        Log.d("Ebz", "made it to Try Block"); 
        KeyPairGenerator keyGen = KeyPairGenerator 
          .getInstance("RSA"); 
        keyGen.initialize(2048); 
        KeyPair key = keyGen.generateKeyPair(); 
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
        tv1.setText(cipher.getProvider().getInfo().toString()); 
        Log.d("Ebz", "Made it passed tv1"); 
        //tv1.setText(ST); 
        cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); 
        byte[] cipherText = cipher.doFinal(plainText); 
        tv2.setText(new String(cipherText, "UTF8").toString()); 
        Log.d("Ebz", "Made it passed tv2"); 
        // tv2.setText(ST); 
        byte[] newPlainText = cipher.doFinal(cipherText); 
        //tv3.setText(new String(newPlainText, "UTF8").toString()); 
        // tv3.setText(ST); 
        Log.d("Ebz", "Made it passed tv3"); 
       } catch (Exception e) { 
        System.out.println("error"); 
       } 
      } 
     }); 
    } 
+2

AndroidでSpongyCastleを使用できますか?注:4096ビット....パラノイアクラブへようこそ;-) – Vincent

+0

@邪悪な人、はるかに良い....あなたはすでに人々が応答しているのを見る+ ve'ly – Mayank

+1

RSAキーを生成するコードが動作する動作しませんか? – Mayank

答えて

3

[OK]を代わりにあなたの次のコードを試してみて、あなたのtry/catchブロック内で何が起こるかを参照してください。

TextView tv1; 
TextView tv2; 
TextView tv3; 
Button convert; 
String publicKeyFilename = null; 
String privateKeyFilename = null; 
String ST = "Ebenezersawesome"; 

@Override public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Log.d("Ebz", "Made it to onCreate"); 
    tv1 = (TextView) findViewById(R.id.tv1); 
    tv2 = (TextView) findViewById(R.id.tv2); 
    tv3 = (TextView) findViewById(R.id.tv3); 
    convert = (Button) findViewById(R.id.button1); 

    try { 
       byte[]plainText = "ST".getBytes("UTF8"); 
       Log.d("Ebz", "made it to Try Block"); 
       KeyPairGenerator keyGen = 
        KeyPairGenerator.getInstance("RSA"); 
       keyGen.initialize(4096); 
       KeyPair key = keyGen.generateKeyPair(); 
       Cipher cipher = 
        Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
       tv3.setText(cipher.getProvider().getInfo().toString()); 
       //tv3.setText(ST); 
       cipher.init(Cipher.ENCRYPT_MODE, key.getPublic()); 
       byte[]cipherText = cipher.doFinal(plainText); 
       tv1.setText(new String(cipherText, "UTF8").toString()); 
       //tv1.setText(ST); 
       byte[]newPlainText = cipher.doFinal(cipherText); 
       tv2.setText(new String(newPlainText, "UTF8").toString()); 
       //tv2.setText(ST); 
      } catch(Exception e) { 
       System.out.println("error"); 
      } 
    // tv2.setText(ST); 
    convert.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Log.d("Ebz", "Made it to onCreate"); 
     } 
    }); 
} 
+0

あなたのコードの編集がうまくいった。ありがとうございました。私のコードは、私がしたいことを正確に行っていませんが、あなたはまだ私の質問に答えました。ありがとう。 –

+0

@ TheObliviatorあなたのコードに何が間違っていたのか、私の編集内容がどういうことが分かったのですか? – Mayank

+0

はい、私は理解しています、私は今それらを比較しています –

関連する問題