es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La desencriptación RSA con clave privada en PHP falló.

Hola, estoy obteniendo un error al desencriptar RSA con la clave privada en PHP, por favor ayuda
(Intento desencriptar en C# y la clave privada funciona bien)

Error

error:04065072:rsa routines:rsa_ossl_private_decrypt:padding check failed

PHP

class RSA{
    protected $private;
    public function __construct(){
        $this->private = @file_get_contents("private.pem");
    }
    public function decrypt($data){
        if (is_null($data) || empty($data) || is_string($data) === false) {
            throw new RuntimeException('No se necesita encriptar.');
        } elseif (is_null($this->private) || empty($this->private)) {
            throw new RuntimeException('Necesitas configurar la clave privada.');
        }
        $key = openssl_get_privatekey($this->private);
        if (!openssl_private_decrypt(base64_decode($data), $result, $key)){
             throw new Exception(openssl_error_string());
        }
        return $result;
    }
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que hay un problema con el relleno durante el proceso de descifrado de RSA en PHP. Este error no ocurrió cuando se usó la misma clave privada para descifrar los datos en C#, por lo tanto, es probable que el problema esté en el código de PHP.

    Al revisar el código de PHP proporcionado, el constructor de la clase RSA lee la clave privada de un archivo (“private.pem”). Asegúrese de que el archivo exista y contenga los datos correctos.

    El método de descifrado primero verifica si los datos de entrada son válidos antes de intentar descifrarlos. Si los datos de entrada no son válidos, el método lanzará una excepción en tiempo de ejecución (“No es necesario cifrar.”). Verifique que los datos de entrada hayan sido cifrados utilizando la clave pública correcta antes de intentar descifrarlos con la clave privada correspondiente.

    Si los datos de entrada son válidos, el método intentará descifrarlos utilizando la clave privada. Si el descifrado falla, el método lanzará una excepción con el mensaje de error generado por OpenSSL. Asegúrese de que la clave privada sea válida y de que los datos hayan sido cifrados utilizando la clave pública correspondiente.

    Para depurar el problema, verifique el modo de relleno utilizado durante el cifrado y asegúrese de que coincida con el modo de relleno utilizado durante el descifrado. También verifique el algoritmo de cifrado utilizado para cifrar los datos y asegúrese de que sea compatible con la versión de OpenSSL utilizada en PHP.

    Por último, considere utilizar una implementación diferente de descifrado RSA en PHP o verificar que el descifrado funcione con un caso de prueba antes de utilizar el código en un entorno de producción.

Comments are closed.