Crittografia RSA in Java, decodifica in PHP

Sto cercando di crittografare una chiave AES con una chiave pubblica RSA e un'app per Android e quindi decifrare la chiave AES su un server usando PHP con phpseclib. Ho provato a verificare che la crittografia / decrittografia RSA funzioni su entrambe le piattaforms crittografando un text statico e decrittandolo in seguito per verificare se ottengo ancora il text originale. Secondo il test, il codice RSA funziona individualmente su ciascuna piattaforma ma sembra esserci una differenza tra le piattaforms.

In Java, sto usando la libreria Bouncy Castle e ho il seguente codice:

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 > 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); 

Quindi nel PHP, sto usando il seguente codice per decodificare la chiave AES:

 $AESkey = base64_decode($AES); $rsa = new Crypt_RSA(); $private = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/PrivateData/private_key.pem'); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $rsa->loadKey($private); $AESkey = $rsa->decrypt($AESkey); 

Quando la chiave AES viene decifrata dal server, ottengo sempre il seguente errore: Errore di decrittografia in C: \ xampp \ php \ PEAR \ phpseclib \ Crypt \ RSA.php sulla row 1911. Osservando il codice in RSA.php, Penso che l'errore abbia a che fare con il padding non corretto durante la crittografia, ma non riesco a capire come risolverlo.

Aggiornamento: ho capito che il codice di crittografia / decrittografia sopra è effettivamente corretto. Il problema che stavo facendo era che non avevo codificato l'output prima di submit i dati dall'app al php, quindi alcune informazioni andavano perse.

Quale versione di phpseclib stai usando? A seconda della versione, potrebbe essere utile:

http://www.frostjedi.com/phpbb/viewtopic.php?p=118414#p118414