Error de desencryption de Phpseclib al descifrar el contenido encriptado en Java

Actualmente estoy intentando crear un sistema de logging en mi aplicación de Android, y quiero encriptar los datos enviados al server al registrarse.

Así es como se generan las keys en PHP:

function rsa_generate($bits=2048) { $rsa = new \phpseclib\Crypt\RSA(); $rsa->setPrivateKeyFormat($rsa::PRIVATE_FORMAT_PKCS8); $rsa->setPublicKeyFormat($rsa::PUBLIC_FORMAT_PKCS8); $rsa->setEncryptionMode($rsa::ENCRYPTION_OAEP); $rsa->setMGFHash('sha1'); $rsa->setHash('sha256'); define("CRYPT_RSA_EXPONENT", 65537); define("CRYPT_RSA_SMALLEST_PRIME", 64); extract($rsa->createKey($bits)); return array("pub"=>$publickey, "priv"=>$privatekey); } 

La key pública se quita del encabezado -----BEGIN PUBLIC KEY----- y el trailer correspondiente. Un ejemplo de una key privada generada es:

 -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4CjTEWJbi7UhHp57xGoB KvT5u7kEVNSXPWp0xjN3W50kJYzRox935MIZ0lF4qNPeXasLfu+9C/sI+KvaRtOM xnnJuh9X73IkKmgoEcZKRwKmhkckGsFakJySkX59ZyIGCT/6rNKg9IFVYN+FSVwK v+SZgwYMhPc6aiwquvJYklzpXlRDDl8fMrm8m5zcKsP87btnoWPrrfdxIxdQpTu/ 0rm+Ix0PsOAND9BPP9ku6Szae9UKPQ2qisnloVswgr+54wjKKZYbjrH+hrzAnTMo HDwfkntuCriacGuPHu01x83d0/8h8d9F+G8hKT4Zp35hK0wGSKFFSyUD9HSX6pfH ywIDAQAB -----END PUBLIC KEY----- 
  • Excluyendo las líneas nuevas agregadas para la legibilidad.

Después de analizar en Java, se ve así:

 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4CjTEWJbi7UhHp57xGoB KvT5u7kEVNSXPWp0xjN3W50kJYzRox935MIZ0lF4qNPeXasLfu+9C/sI+KvaRtOM xnnJuh9X73IkKmgoEcZKRwKmhkckGsFakJySkX59ZyIGCT/6rNKg9IFVYN+FSVwK v+SZgwYMhPc6aiwquvJYklzpXlRDDl8fMrm8m5zcKsP87btnoWPrrfdxIxdQpTu/ 0rm+Ix0PsOAND9BPP9ku6Szae9UKPQ2qisnloVswgr+54wjKKZYbjrH+hrzAnTMo HDwfkntuCriacGuPHu01x83d0/8h8d9F+G8hKT4Zp35hK0wGSKFFSyUD9HSX6pfH ywIDAQAB 

Guardando la key de arriba y usándola para encriptar una cadena en Kotlin

 val sPublic = "PUBLIC KEY HERE" fun encrypt(clearText: String, publicKey: String): String { var encryptedBase64 = "" try { val keyFac = KeyFactory.getInstance("RSA") val keySpec = X509EncodedKeySpec(Base64.decode(publicKey.toByteArray(), Base64.DEFAULT)) val key = keyFac.generatePublic(keySpec) // get an RSA cipher object val cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING") // Initiate the cypher mode and declare what key to use (PUBLIC KEY) cipher.init(Cipher.ENCRYPT_MODE, key) // Encrypt the clearText val encryptedBytes = cipher.doFinal(clearText.toByteArray(charset("UTF-8"))) // Turn it into a base64 string encryptedBase64 = String(Base64.encode(encryptedBytes, Base64.DEFAULT)) } catch (e: Exception) { e.printStackTrace() } // Replace the newlines return encryptedBase64.replace("([\\r\\n])".toRegex(), "") } // The encryptedText variable gets sent to the server val encryptedText = encrypt("This is a secret", s.Public) 

Todo funciona hasta este momento, ahora para descifrarlo usando la siguiente function de PHP donde falla y arroja un error:

 function oaep_decrypt($ciphertext, $p) { $rsa = new \phpseclib\Crypt\RSA(); $rsa->loadKey($p); return $rsa->decrypt(base64_decode($ciphertext)); } 

La única información que puedo proporcionar sobre el error es que está en la línea 2472 en phpseclib \ Crypt \ RSA.php