Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

305
Vistas
Cifrar un archivo zip con la herramienta javascript browserpgp

Me gustaría encriptar un archivo zip usando OpenPGP.js ( https://browserpgp.github.io/ ). Todo el procesamiento debe realizarse en el lado del cliente, sin la participación de Node.js. Con el navegador pgp.js basado en javascript, el cifrado del archivo de texto sin formato es fácil, pero el cifrado de los archivos zip es un desafío. Adjunto el código que utilizo para cifrar el archivo zip. Dado que el contenido del archivo zip no es texto, he usado guías para trabajar con datos binarios de https://github.com/openpgpjs/openpgpjs . Creo que el archivo resultante después del cifrado de un archivo zip debe estar en formato sin formato/binario, y el archivo resultante guardado del siguiente código de cifrado está en binario. Sin embargo, lo verifiqué y no se puede descifrar.

Estoy usando la herramienta OpenPGP de escritorio de Kleopatra ( https://www.openpgp.org/software/kleopatra/ ) para verificar si el archivo encriptado resultante. Usando la herramienta, probé para ver si podía descifrar el archivo encriptado usando mi clave privada. El archivo binario resultante no se puede descifrar con la herramienta Kleopatra. Así que me preguntaba qué está mal con este código, ya que el archivo resultante debería poder descifrarse usando Kleopatra.

Puede crear dos claves públicas usando la herramienta aquí: https://browserpgp.github.io

 function openpgp_encryptZIPFile(){ var zip = new JSZip(); zip.file("Hello.txt", "Hello World\n"); var img = zip.folder("images"); zip.generateAsync({type:"blob"}) .then(function(content) { console.log('contents: ' + content); encryptedZipFile = OpenPGPEncryptDataZipFile(content); }); } async function OpenPGPEncryptDataZipFile(zipBlob) { //This is my public key const key1 = `somekey1`; //you would have to put a public key here //This is the testuser public key const key2 = `somekey2`; //you would have to put another public key here const publicKeysArmored = [key1, key2]; //create a combined key const publicKeys = await Promise.all(publicKeysArmored.map(armoredKey => openpgp.readKey({ armoredKey }))); var binaryData = new Uint8Array(zipBlob); //https://github.com/openpgpjs/openpgpjs/blob/main/README.md //For OpenPGP.js v4 syntax is: const message = openpgp.Message.fromBinary(binaryData); //For OpenPGP.js v5 syntax is: const message2 = await openpgp.createMessage({ binary: binaryData }); //`const {data: encrypted}' OR `const { message }' OR just `const encrypted' const encrypted = await openpgp.encrypt({ message: await openpgp.createMessage({ binary: binaryData }), encryptionKeys: publicKeys, //signingKeys: privateKey // optional format: 'binary' }); console.log('encrypted: ' + encrypted); var encryptedBlob = new Blob([encrypted],{type: 'text/plain'}); //var encryptedBlob = new Blob([encrypted], {type: "octet/stream"}); saveAs(encryptedBlob, 'test.zip.enc' ); }
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Alguien de OpenPGPjs github repo respondió esto

Lo más probable es que new Uint8Array(zipBlob) no haga lo que cree que hace. Tal vez pruebe new Uint8Array(await zipBlob.arrayBuffer()) , o simplemente solicite a JSZip un Uint8Array en lugar de un Blob en primer lugar.

Además, octet/stream no es un tipo MIME válido. ¿Quizás quisiste decir application/octet-stream?

Así que cambié new Uint8Array(zipBlob) a new Uint8Array(await zipBlob.arrayBuffer()) y funcionó.

https://github.com/openpgpjs/openpgpjs/discusiones/1535

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda