PHP - Decrypt

1

The encryption is done correctly but when using openssl_get_privatekey and save it in $key_resource the value is left blank so it throws the error: openssl_private_decrypt(): key parameter is not a valid private key in ...

function encriptarDatos($datos){
        $fp=fopen("public.key","r"); 
        $pub_key=fread($fp,8192); 
        fclose($fp); 
        $key_resource = openssl_get_publickey($pub_key); 

        openssl_public_encrypt($datos,$encriptado,$key_resource ); 
        /*uses the already existing key resource*/ 
        return(base64_encode($encriptado));
    }

function desencriptarDatos($datos){
        $fp=fopen("private.key","r"); 
        $priv_key=fread($fp,8192); 
        fclose($fp); 
        echo "priv_key: $priv_key <br/><br/>";
        $key_resource = openssl_get_privatekey($priv_key);
        echo "key_resourse: $key_resource";

        openssl_private_decrypt($datos,$desencriptado,$key_resource); 
        /*uses the already existing key resource*/ 
        return(base64_encode($desencriptado));
    }

Then put it like this:

$fp=fopen("private.key","r"); 
            $priv_key=fread($fp,8192); 
            fclose($fp); 

            openssl_private_decrypt($datos, $desencriptado, openssl_pkey_get_private($priv_key, "phrase"));
            /*uses the already existing key resource*/ 
            return(base64_encode($desencriptado));

But the result is blank too ...

    
asked by Elias Tutungi 09.12.2016 в 21:56
source

2 answers

1

Try to do it like this:

  • Generate clave privada RSA :

    > openssl genrsa -out private.pem 1024
    
  • Extract the clave pública :

    > openssl rsa -in private.pem -pubout -out public.pem
    
  • Code PHP :

    <?php
    function encriptarDatos($texto)
    {
        $pub_key = openssl_pkey_get_public(file_get_contents('public.pem'));
    
        openssl_public_encrypt($texto, $encriptado, $pub_key, OPENSSL_PKCS1_PADDING);
        return base64_encode($encriptado);
    }
    
    function desencriptarDatos($texto)
    {
        $priv_key = openssl_pkey_get_private(file_get_contents('private.pem'));
        $texto = base64_decode($texto);
        openssl_private_decrypt($texto, $desencriptado, $priv_key, OPENSSL_PKCS1_PADDING);
        return $desencriptado;
    }
    
    var_dump($encriptado = encriptarDatos('Hola mundo!'));
    var_dump(desencriptarDatos($encriptado));
    
answered by 12.12.2016 в 22:07
0

Without hardly knowing PHP, almost certainly it is a problem of permissions of the file privake.key . As its name suggests, it is the private key, which has probably been generated with read-only permissions for its owner, and your PHP script runs under the server or under fastcgi (fpm), so your user will probably be < em> www-data , and you will not have read permissions on that file.

    
answered by 09.12.2016 в 22:10