使用Phpseclib在Java中加密和在PHP中解密

使用Phpseclib在Java中加密和在PHP中解密,java,php,rsa,phpseclib,Java,Php,Rsa,Phpseclib,编辑2: 问题已经解决了。我不理解php中的loadkey函数应该如何工作,我错误地认为它会读取密钥文件(它不会)。解决方案是将文件内容读入变量,然后使用loadkey加载变量 编辑: 问题似乎出在钥匙上。我意识到loadkey返回false,表示它无法读取密钥。phpseclib接受的格式和用java创建的密钥是否会有差异 我正在尝试用Java(android)加密AES密钥,并用PHP解密它,以使用对称加密进行数据传输。目前,我能够在Java中使用RSA对短文件或字符串进行加密和解密,但无

编辑2: 问题已经解决了。我不理解php中的loadkey函数应该如何工作,我错误地认为它会读取密钥文件(它不会)。解决方案是将文件内容读入变量,然后使用loadkey加载变量

编辑: 问题似乎出在钥匙上。我意识到loadkey返回false,表示它无法读取密钥。phpseclib接受的格式和用java创建的密钥是否会有差异


我正在尝试用Java(android)加密AES密钥,并用PHP解密它,以使用对称加密进行数据传输。目前,我能够在Java中使用RSA对短文件或字符串进行加密和解密,但无法在PHP中对其进行解密

我使用phpseclib在PHP中解密,我没有得到任何错误,但我的输出字符串为空

这是我正在使用的代码:

Java:

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";}
}

注意:函数escribir只是将数据逐字节写入文件


问题可能是由什么引起的?

您可以发布一个示例密钥吗?很难说密钥格式是否是不受支持的格式,但无法看到它lol。
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;