Convert .Key file to .PEM in PHP

Hi tyros, im answering a question from a follower. Here is the way to convert a ".key" file to ".pem", using "phpseclib" in php

spl_autoload_register(function ($class_name) {
    $url = str_replace("\\", "/", $class_name);
    include_once __DIR__ . "/" . $url . ".php";
});

use phpseclib\Crypt\RSA as RSA;
use phpseclib\Crypt\Common\Keys\PKCS1 as PKCS1;


    public function KeyPEM() {
        $rsa = new RSA();
        $rsa->setPassword($this->password_key); //"$this->password_key": your .key file password
        $rsa->load(file_get_contents($this->path_archivo_key)); //"$this->path_archivo_key": your path to .key file
        $private = openssl_pkey_get_private($rsa->getPrivateKey(), $this->password_key);
        $result = "";
        openssl_pkey_export($private, $result);
        return $result;
    }

Here you can get PHPSecLib: Get it here
Note: "phpseclib" needs "ParagonIE" library to works correctly, Get it here.
Thanks!

4 comentarios:

  1. Hola. Garcais por el post anteriior, excelente.
    Estoy tratando de usar esta función pero me causa error en el load, porque ninguna de las versiones lleva esa funcion existe la de loadKey, pero me devuelve false,
    Algun comentario? Gracias. Excelente trabajo haces. Te aradezco de antemano.

    ResponderEliminar
  2. Hola. Hay varias versiones de PHPSecLib. Necesitas descargar la correcta, para tu version de PHP.

    ResponderEliminar
  3. NO pude hacerlo funcionar convertir el archivo .key a .pem con la libreria phpseclib, pero al fin lo pude lograr con otra librería llamada: cfdiutils (https://github.com/eclipxe13/CfdiUtils/tree/v3)

    Te paso el codigo, por si sirve de ayuda a alguien, esta librería tiene mucho mas cosas, pero me concentro en la solución de este tema en especifico:

    Aquí el codigo en dropbox listo para usar:
    (https://www.dropbox.com/s/i95nh9bfapebvtw/cfdi.rar?dl=0)

    El index.php quedó así:
    derKeyProtect($keyDerFile, $keyDerPass, $keyPemFile, $keyPemPass);

    //==============

    Gracias.

    ResponderEliminar