Szyfrowanie w Javie i deszyfrowanie w PHP za pomocą Phpseclib

Edytuj 2: Problem został rozwiązany. Nie rozumiałem, jak powinna działać funkcja loadkey w php i błędnie założyłem, że odczytuje plik klucza (nie robi tego). Rozwiązaniem było odczytanie zawartości pliku do zmiennej, a następnie załadowanie zmiennej za pomocą loadkey.

Edytować: Problem wydaje się być związany z kluczem. Zrozumiałem, że loadkey powraca fałsz, wskazując, że nie mógł odczytać klucza. Czy istnieje różnica w formatach akceptowanych przez phpseclib i klucze utworzone w java?

Próbuję zaszyfrować klucz AES w Javie (android) i odszyfrować go w PHP, aby użyć szyfrowania symetrycznego do przesyłania danych. Obecnie jestem w stanie zaszyfrować i odszyfrować krótki plik lub ciąg za pomocą RSA w Javie, ale nie byłem w stanie go odszyfrować w PHP.

Używam phpseclib do deszyfrowania w PHP i nie otrzymuję żadnego błędu, ale mój łańcuch wyjściowy ma wartość NULL.

To jest kod, którego używam:

Jawa:

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:

<?php
include('./Crypt/RSA.php');

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

Kod używany do generowania kluczy:

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;

}

UWAGA: Funkcja escribir po prostu zapisuje bajt danych w bajcie do pliku.

Co może być przyczyną problemu?

questionAnswers(0)

yourAnswerToTheQuestion