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.

Respuesta de la API Rest de NodeJs codificada con clave privada.

Se me han proporcionado una clave pública y privada para llamar a una restAPI en nodejs.
Ambas claves están en formato ASCII claro.

Utilizo el siguiente código para encriptar mi mensaje:


(async () => { // colocar las claves entre comillas invertidas (``) para evitar errores causados por espacios o tabulaciones // ENCRYPT const publicKeyArmored = fs.readFileSync(publicKeyFile, { encoding: 'utf8', flag: 'r' }); const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored }); const encrypted = await openpgp.encrypt({ message: await openpgp.createMessage({ text: 'Hola, Mundo!' }) , encryptionKeys: publicKey // , signingKeys: privateKey // opcional }); console.log("Encriptado:", encrypted); // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----' })();

Sin embargo, cuando intento descifrar la respuesta, todos los ejemplos de código que he encontrado parecen requerir una frase de contraseña para utilizar la clave privada suministrada, pero esto no está codificado de ninguna manera, nuevamente es ASCII claro, comenzando con:

-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

lQO+BGHApmABCAC70QG0T3bh1MVRGKmY9cOM2NFEie2KXCLGXUPa+2B5JOnDypGX
msoLau8FtKIqvAVAYSsONlE4P4RcltyrOTHLMvWhu73ZTJIBu6GGkgM6bKOtu2Rp
/VbPylPIXrkA3A4s0089VGgmFqJul04lit2svLwxD31ZEIY3Ke3kd0dV0nM4npRO
EZUPR5Qr6KCwBsL+ZHbDuG2YrC7oKcnJTXcdszrF7+FLAwI8viZhJOXyagJRioXd
/H/IpauXyvejN22/eRjch9IRMSz+qh0avj9tcuuJ1k4sBQQukeoIoPwFe9Rb9TY2 ..

El siguiente código sugiere que necesito una frase de contraseña, pero esta clave no parece requerirla:

async function decrypt() {
  const privateKey = (await openpgp.key.readArmored([privateKeyArmored])).keys[0];
  await privateKey.decrypt(passphrase);

const encryptedData = fs.readFileSync("encrypted-secrets.txt");
  const decrypted = await openpgp.decrypt({
    message: await openpgp.message.readArmored(encryptedData),
    privateKeys: [privateKey],
  });

console.log(decrypted.data);
}

Entonces, ¿cómo lo uso sin una frase de contraseña?

¡Gracias de antemano por su espíritu navideño y cualquier ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es inusual que una clave privada no requiera una frase de contraseña para su desencriptación, ya que esta frase de contraseña se utiliza como una capa adicional de seguridad para proteger la clave privada. Sin embargo, si la clave privada que se te ha proporcionado realmente no requiere una frase de contraseña, simplemente puedes omitir el paso de desencriptación que requiere una frase de contraseña en tu código. El siguiente código modificado debería funcionar para ti:

    (async () => {
        // coloca las claves entre comillas invertidas (``) para evitar errores causados por espacios o tabulaciones
    
        // ENCRIPTAR
    
        const publicKeyArmored = fs.readFileSync(publicKeyFile, {
          encoding: 'utf8',
          flag: 'r'
        });
    
        const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
    
        const encrypted = await openpgp.encrypt({
            message: await openpgp.createMessage({ text: 'Hola, Mundo!' }) // Cambié 'Hello, World!' por 'Hola, Mundo!'
        ,   encryptionKeys: publicKey
        });
    
        console.log("Encriptado:", encrypted); // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
    
        // DESENCRIPTAR
    
        const privateKeyArmored = fs.readFileSync(privateKeyFile, {
          encoding: 'utf8',
          flag: 'r'
        });
    
        const privateKey = await openpgp.readPrivateKey({ armoredKey: privateKeyArmored });
    
        const decrypted = await openpgp.decrypt({
          message: await openpgp.message.readArmored(encrypted.data),
          privateKeys: [privateKey]
        });
    
        console.log('Desencriptado:', decrypted.data); // Cambié 'Decrypted' por 'Desencriptado'
    })();
    

    Ten en cuenta que he añadido el paso de desencriptación al código, asumiendo que quieres desencriptar la respuesta que recibes después de encriptar tu mensaje. En este caso, también necesitarás tener la clave privada, la cual parece que te ha sido suministrada.

Comments are closed.