title: RSA encryption in Java, decryption in PHP
body: <p>I am trying to encrypt an AES key with an RSA public key in and Android app and then decrypt the AES key on a server using PHP with phpseclib.  I have tested to make sure that the RSA encryption/decryption work on both platforms by encrypting a static text and decrypting it afterwards to check if I still get the original text.  According to the test, the RSA code works individually on each platform but there seems to be a difference between the platforms.</p>
  
  <p>In Java, I am using the Bouncy Castle library and have the following code:</p>
  
  <pre><code>RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(
  new BigInteger("00c897f9e401819e223ffbecc6f715a8d84dce9022762e0e2d54fa434787fcaf230d28bd0c3b6b39b5211f74ffc4871c421362ccfc07ae98b88fa9728f1e26b8210ebbf4981e45867fe810938294d0095d341b646b86dcbd4c246676c203cb1584d01eef0635299714d94fa12933ecd35e6c412573156d9e6e549b7804eb6e165660507d8748bcc8c60da10099bacb94d3f7b50b1883ee108489e0dd97ed7d28e564edd4ee5d6b4225f5c23cdaaf495c3fa08c3b82e1674946e4fa1e79b2493204d6953c261105ba5d0f8dcf3fcd39a51fbc18a5f58ffff169b1bed7ceeded2ae0e8e8e2238e8b77b324d1a482593b1a642e688c860e90d5a3de8515caf384133b", 16),
  new BigInteger("11", 16));
  keyFactory = KeyFactory.getInstance("RSA", "BC");
  //RSAPublicKeySpec rsaKeySpec = new RSAPublicKeySpec(rsaKey.MODULUS, new BigInteger("11", 16));
  RSAPublicKey pubKey = (RSAPublicKey)keyFactory.generatePublic(pubKeySpec);  
  
  //Set up the cipher to RSA encryption
  Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
  cipher.init(Cipher.ENCRYPT_MODE, pubKey);
  
  // make sure the Aes Key is less than a block size
  // otherwise major errors will occur
  if(AesKey.length * 8 &gt; pubKey.getModulus().bitLength())
      return "Error: AesKey bigger than block size of RSA Key";
  
  byte[] encryptedKey = cipher.doFinal(AesKey);
  
  // return result Base64 encoded
  return Base64.encodeToString(encryptedKey, Base64.DEFAULT);
  </code></pre>
  
  <p>Then in the PHP, I am using the following code to decrypt the AES key:</p>
  
  <pre><code>$AESkey = base64_decode($AES);
  
  $rsa = new Crypt_RSA();
  $private = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/PrivateData/private_key.pem');
  $rsa-&gt;setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
  $rsa-&gt;loadKey($private);
  $AESkey = $rsa-&gt;decrypt($AESkey);
  </code></pre>
  
  <p>When the AES key is being decrypted by the server, I always get the following error:  Decryption error in C:\xampp\php\PEAR\phpseclib\Crypt\RSA.php on line 1911.  Looking at the code in RSA.php, I think the error has something to do with incorrect padding during encryption but I can't seem to figure out a way to fix it.  </p>
  
  <p>Update:  I figured out that the above encryption/decryption code is actually correct.  The problem I was having was that I did not url encode the output before sending the data from the app to the php so some of the info was being lost.</p>