Шифрование в 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 просто записывает байты данных в файл.
Что может быть причиной проблемы?