title: Getting error java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
body: <p>I have private pem key file, I am using that file for signing and encrypting the data.
  Signing works fine and I am also able to verify on another platform, but while encrypting the data, I am getting the following the error:</p>
  
  <pre><code>04-04 09:55:51.821: E/AndroidRuntime(2725): FATAL EXCEPTION: Thread-102
  04-04 09:55:51.821: E/AndroidRuntime(2725): java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
  04-04 09:55:51.821: E/AndroidRuntime(2725):     at com.android.org.bouncycastle.jce.provider.JCERSACipher.engineDoFinal(JCERSACipher.java:457)
  04-04 09:55:51.821: E/AndroidRuntime(2725):     at javax.crypto.Cipher.doFinal(Cipher.java:1106)
  04-04 09:55:51.821: E/AndroidRuntime(2725):     at com.example.testsigning.MainActivity.rsaEncrypt(MainActivity.java:185)
  04-04 09:55:51.821: E/AndroidRuntime(2725):     at com.example.testsigning.MainActivity$1.run(MainActivity.java:51)
  04-04 09:55:51.821: E/AndroidRuntime(2725):     at java.lang.Thread.run(Thread.java:856)
  </code></pre>
  
  <p>Following is the code snippet to extract keys from private file:</p>
  
  <pre><code>// Read the file into string
  String privKeyPEM = readFile("/mnt/sdcard/rsa_key");
  
  privKeyPEM = privKeyPEM.replace("-----BEGIN RSA PRIVATE KEY-----", "");
  privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");
  
  // Base64 decode the data
  byte[] encoded = Base64.decode(privKeyPEM, Base64.DEFAULT);
  
  // PKCS8 decode the encoded RSA private key
  PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
  KeyFactory kf = KeyFactory.getInstance("RSA");
  mPrivKey = kf.generatePrivate(keySpec);
  
  RSAPrivateCrtKey privk = (RSAPrivateCrtKey) mPrivKey;
  
  RSAPublicKeySpec pubKeySpec = new java.security.spec.RSAPublicKeySpec(
          privk.getPublicExponent(), privk.getModulus());
  
  mPubKey = kf.generatePublic(pubKeySpec);
  </code></pre>
  
  <p>And following is the code snippet to encrypt the data:</p>
  
  <pre><code>Cipher cipher = Cipher.getInstance("RSA/None/OAEPWithSHA1AndMGF1Padding", "BC");
  cipher.init(Cipher.ENCRYPT_MODE, mPubKey);
  return cipher.doFinal("Hello World".getBytes()); // here is the problem
  </code></pre>
  
  <p>Any help to resolve the issue would be highly appreciated.</p>
  
  <p>Regards,
  Yuvi</p>