RSA密钥对使用充气城堡生成。 使代码可以从java程序运行

我使用的Java代码通过充气城堡库生成公钥和私钥。 我的问题是将它实现到我的Android设备可运行的代码中。 我的代码没有像我编写的那样显示RSA密钥,并且在我的大部分故障排除中,我仍然无法按照我的要求进行代码,尽管我没有错误。 我怀疑的是我将所有代码放入try / catch块的方式,但我不太确定。 编辑:代码较低

这是生成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"); } } }); } 

好的,请尝试使用以下代码,然后查看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"); } }); }