Nueva pregunta

Pregunta:

Fecha: 15-12-2017 04:25:56 (En Español)

Una consulta por favor![No resuelta]

Como andan caballeros!... Quería hacer una consulta relacionado a la linea de código de firma. Como desencriptas el mensaje y lo mostras con la clave publica. Desde ya mucha gracias
<?php
//Datos que se quieren firmar:
$datos = 'Este texto será firmado. Thanks for your attention :)';
//Se deben crear dos claves aparejadas, una clave pública y otra privada
//A continuación el array de configuración para la creación del juego de claves
$configArgs = array(
    'config' => 'C:\xampp5_6_15\php\extras\openssl\openssl.cnf', //<-- esta ruta es necesaria si trabajas con XAMPP
    'private_key_bits' => 2048,
    'private_key_type' => OPENSSL_KEYTYPE_RSA
);
$resourceNewKeyPair = openssl_pkey_new($configArgs);
if (!$resourceNewKeyPair) {
    echo 'Puede que tengas problemas con la ruta indicada en el array de configuración "$configArgs" ';
    echo openssl_error_string(); //en el caso que la función anterior de openssl arrojará algun error, este sería visualizado gracias a esta línea
    exit;
}
//obtengo del recurso $resourceNewKeyPair la clave publica como un string 
$details = openssl_pkey_get_details($resourceNewKeyPair);
$publicKeyPem = $details['key'];
//obtengo la clave privada como string dentro de la variable $privateKeyPem (la cual es pasada por referencia)
if (!openssl_pkey_export($resourceNewKeyPair, $privateKeyPem, NULL, $configArgs)) {
    echo openssl_error_string(); //en el caso que la función anterior de openssl arrojará algun error, este sería visualizado gracias a esta línea
    exit;
}
//guardo la clave publica y privada en disco:
file_put_contents('private_key.pem', $privateKeyPem);
file_put_contents('public_key.pem', $publicKeyPem);
//si bien ya tengo cargado el string de la clave privada, lo voy a buscar a disco para verificar que el archivo private_key.pem haya sido correctamente generado:
$privateKeyPem = file_get_contents('private_key.pem');
//obtengo la clave privada como resource desde el string
$resourcePrivateKey = openssl_get_privatekey($privateKeyPem);
//crear la firma dentro de la variable $firma (la cual es pasada por referencia)
if (!openssl_sign($datos, $firma, $resourcePrivateKey, OPENSSL_ALGO_SHA256)) {
    echo openssl_error_string(); //en el caso que la función anterior de openssl arrojará algun error, este sería visualizado gracias a esta línea
    exit;
}
// guardar la firma en disco:
file_put_contents('signature.dat', $firma);
// comprobar la firma
if (openssl_verify($datos, $firma, $publicKeyPem, 'sha256WithRSAEncryption') === 1) {
    echo 'la firma es valida y los datos son confiables';
} else {
    echo 'la firma es invalida y/o los datos fueron alterados';
}



Etiquetas: PHP - PHP Avanzado Votos: 0 - Respuestas: 4 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 16-12-2017 11:36:28 En la mayoría de sistemas por seguridad no se deben poder desencriptar dicha información, en caso requerido para presentar información es mejor dejar registro si y solo si en la bd, y presentas y comparas con ella...
    Esto lo haces al hacer antes la encriptacion, y tendras con que comparar y/o que presentar...
    ya que los tienes de inicio...
    Saludos...
    Stryfe™
      Votos: 0 - Link respuesta
     
  • Fecha: 17-12-2017 15:39:30 Gracias Ernesto... pero creo que no entendiste de lo que estoy hablando :D... Hoy en dia las cryptomonedas trabajan de esa forma, una clave privada y una publica...   Votos: 0 - Link respuesta
     
  • Fecha: 21-12-2017 10:27:05 Lo que estas haciendo en tu código es justo como dices, firmar un dato y luego verificar su integridad en base a la firma. No estas encriptando en ningún momento. Lo que necesitas seria esto openssl_public_encrypt y openssl_private_decrypt. Ademas podrías buscar algo mas de información sobre PKI, public key infraestructure.

    http://php.net/manual/es/function.openssl-public-encrypt.php
    http://php.net/manual/es/function.openssl-private-decrypt.php

    Ps. No confundamos PKI con Blockchain :D
    https://www.beame.wiki/pki-blockchain/

    Saludos.
      Votos: 0 - Link respuesta
     
  • Fecha: 21-12-2017 13:00:33 A es que no dices las cosas, el codigo no muestra como tal... ya que si quieres es "Private Key" y "Public Key" de una firma digital, es mejor como ya lo puso Jorge Zabala...

    Y un ejemplo esta en la misma pagina de php
    http://php.net/manual/es/function.openssl-sign.php
    No debe darte problema, pues es muy facil de entender el ejemplo.
    Saludos... :)
    Stryfe™
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com