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