Шифрование в Java и дешифрование в PHP с помощью Phpseclib

Изменить 2: Проблема была решена. Я не'Я не понимаю, как должна работать функция loadkey в php, и я ошибочно предположил, что она будет читать файл ключа (это не так). Решением было прочитать содержимое файла в переменную и затем загрузить переменную с помощью клавиши loadkey.

Редактировать: Проблема, кажется, с ключом. Я понял, что loadkey возвращает false, что указывает на то, что он не может прочитать ключ. Может ли быть разница в форматах, принятых phpseclib, и ключах, созданных в java?

Я пытаюсь зашифровать ключ AES в Java (Android) и расшифровать его в PHP, чтобы использовать симметричное шифрование для передачи данных. В настоящее время я могу зашифровать и расшифровать короткий файл или строку, используя RSA в Java, но не смог расшифровать его в PHP.

Я использую phpseclib для расшифровки в PHP, и я не получаю никакой ошибки, но моя строка вывода равна нулю.

Это код, который я использую:

Джава:

File archivo_llave_publica = new File(direccion);
        byte[] bytes_llave = leer(archivo_llave_publica);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");          
        EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(bytes_llave);
        PublicKey pubKey = keyFactory.generatePublic(publicKeySpec);
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] cipherData = cipher.doFinal(src);
        return cipherData;

PHP:

setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->loadKey('./key/Pri.txt'); // public key
$temprsa = $rsa->decrypt($key);
if ($temprsa==null){echo "null decrypt";}

Код, используемый для генерации ключей:}

public void generaArchivoLlaves(String pub_file, String pri_file){
    File LlavePrivada = new File(raiz.getAbsolutePath()+"/Bushfire/"+pri_file);
    File LlavePublica = new File(raiz.getAbsolutePath()+"/Bushfire/"+pub_file);
    try {
        KeyPair kp = generaLlaves();
        byte[] privateKeyBytes = kp.getPrivate().getEncoded();
        byte[] publicKeyBytes = kp.getPublic().getEncoded();
        Toast.makeText(this, "Privada:  "+kp.getPrivate().getFormat(), Toast.LENGTH_LONG).show();
        Toast.makeText(this, "Pública:  "+kp.getPublic().getFormat(), Toast.LENGTH_LONG).show();
        escribir(LlavePrivada, privateKeyBytes);
        escribir(LlavePublica, publicKeyBytes);
    }
    catch (NoSuchAlgorithmException e) {Toast.makeText(this, "Error al generar llave", Toast.LENGTH_LONG).show();}
}

public KeyPair generaLlaves() throws NoSuchAlgorithmException{
    KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
    kpg.initialize(2048);
    KeyPair kp = kpg.genKeyPair();  
    //Toast.makeText(this, "Se generó correctamente", Toast.LENGTH_LONG).show();
    return kp;

НОТА: Функция escribir просто записывает байты данных в файл.

Что может быть причиной проблемы?

Ответы на вопрос(0)

Ваш ответ на вопрос