title: RSA Encryption Decryption in Android
body: <p>I am implementing a demo for RSA Encryption and Decryption in Android. I can Perform Encryption very well, but In Decryption I get an Exception: <code>&gt;&gt;java.security.InvalidKeyException: unknown key type passed to RSA</code>.</p>
  
  <pre><code>    KeyPairGenerator kpg;
      KeyPair kp;
      PublicKey publicKey;
      PrivateKey privateKey;
      byte [] encryptedBytes,decryptedBytes;
      Cipher cipher,cipher1;
      String encrypted,decrypted;
  
      public String RSAEncrypt (final String plain) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException 
      {
          kpg = KeyPairGenerator.getInstance("RSA");
          kpg.initialize(1024);
          kp = kpg.genKeyPair();
          publicKey = kp.getPublic();
          privateKey = kp.getPrivate();
  
          cipher = Cipher.getInstance("RSA");
          cipher.init(Cipher.ENCRYPT_MODE, publicKey);
          encryptedBytes = cipher.doFinal(plain.getBytes());
          encrypted = new String(encryptedBytes);
          System.out.println("EEncrypted?????"+encrypted);
          return encrypted;
  
      }
  
      public String RSADecrypt (final String result) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException 
      {
  
          cipher1=Cipher.getInstance("RSA");
          cipher1.init(Cipher.DECRYPT_MODE, privateKey);
          decryptedBytes = cipher1.doFinal(result.getBytes());
          decrypted = new String(decryptedBytes);
          System.out.println("DDecrypted?????"+decrypted);
          return decrypted;
  
      }
  </code></pre>
  
  <p>And I am calling the function from here:</p>
  
  <pre><code>encrypt.setOnClickListener(new OnClickListener()
          { 
              public void onClick(View arg0) 
              {
                      try
                      {
                          RSAEncrypt rsaencrypt=new RSAEncrypt();
                          rsaencrypt.RSAEncrypt(name);
  
                          result=rsaencrypt.RSAEncrypt(name);
                          Toast.makeText(getBaseContext(), result.toString(),Toast.LENGTH_SHORT).show();
  
                          System.out.println("Result:"+result);
                      }
                      catch(Exception e)
                      {
                          e.printStackTrace();
                          Toast.makeText(getBaseContext(), e.toString(),Toast.LENGTH_LONG).show();
                      }
              }
          });
  
          decrypt.setOnClickListener(new OnClickListener()
          { 
              public void onClick(View arg0) 
              {
                  {
                      try
                      {
                          RSAEncrypt rsadecrypt=new RSAEncrypt();
  
                          rsadecrypt.RSADecrypt(result);
  
                          ans=rsadecrypt.RSADecrypt(result);
                          System.out.println("Result is"+ans);
                          Toast.makeText(getBaseContext(), ans.toString(),Toast.LENGTH_LONG).show();
                      }
                      catch(Exception e)
                      {
                          e.printStackTrace();
                          Toast.makeText(getBaseContext(), e.toString(),Toast.LENGTH_LONG).show();
                          System.out.println("Exception is&gt;&gt;"+e);
                      }
              }
          });
  </code></pre>