El método
Lo que hace este sitio es de lo más corriente en el plano técnico. Lo raro es hacerlo sin recibir jamás sus archivos, y decir con precisión dónde están los límites.
Las cuatro reglas de construcción
El archivo no sale del dispositivo
El navegador sabe leer un archivo, descodificarlo, transformarlo y fabricar una descarga. Todo se hace ahí. No hay ningún servidor que reciba nada, porque el sitio es un conjunto de archivos estáticos.
Cero dependencias de red
Ninguna biblioteca cargada desde un tercero, ninguna tipografía remota, ninguna imagen remota, ninguna medición de audiencia incrustada. Todo lo que carga la página viene de este dominio, y no se carga nada más.
El código se lee
Nada está comprimido ni enrevesado. Una herramienta es un solo archivo, con su nombre. Es lo que hace posible la comprobación para alguien que no ha escrito el sitio.
Cada herramienta anuncia SUS formatos y SUS límites
Nunca «todos los formatos». Un formato que un navegador no sabe abrir no se vuelve posible porque se escriba en una portada.
La matriz de compatibilidad
Es el resultado de una campaña de comprobación hecha antes de escribir la primera herramienta, y lleva fecha. Los navegadores se mueven: se vuelve a comprobar en cada revisión, no se copia.
Compatibilidad comprobada el July 30, 2026
Formatos de imagen que el navegador sabe ABRIR
Esto decide si una herramienta puede mostrar su archivo y trabajar con él. Un formato que no está aquí no está «a punto de llegar»: no está.
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| JPEG (.jpg) | yes | yes | yes |
| PNG (.png), incluido el animado | yes | yes | yes |
| WebP (.webp) | yes | yes | yes |
| Safari desde la versión 14, en macOS Big Sur y posteriores. | |||
| AVIF (.avif) | yes | yes | yes |
| Chrome 85, Firefox 93, Safari 16.1. | |||
| GIF (.gif) | yes | yes | yes |
| BMP (.bmp) | yes | yes | yes |
| SVG (.svg) | yes | yes | yes |
| ICO (.ico) | yes | yes | yes |
| TIFF (.tif, .tiff) | no | no | yes |
| Safari es el ÚNICO navegador que muestra un TIFF. Los metadatos de un TIFF, en cambio, se leen en todas partes: están en la cabecera del archivo, no en la imagen. | |||
| HEIC, HEIF (fotos de iPhone) | no | no | yes |
| Safari 17 e iOS 17 las muestran. Chrome, Firefox y Edge no las han descodificado nunca, por una cuestión de patentes sobre el códec. El descodificador por software pesa más de diez megabytes: descartado, y escrito. | |||
| JPEG XL (.jxl) | partly | partly | yes |
| Actualizado el 30/07/2026. El formato más inestable del grupo: retirado de Chromium en 2022, luego un descodificador escrito en Rust volvió en Chrome 145 en febrero de 2026 y en Firefox 152 en junio de 2026, pero DESACTIVADO por defecto en los dos, detrás de una opción oculta. Safari lo muestra por defecto desde su versión 17. Ningún navegador sabe ESCRIBIRLO. Ninguna herramienta de este sitio se apoya en él mientras la situación siga moviéndose. | |||
Formatos que el navegador sabe ESCRIBIR
Esto decide en qué puede convertir su imagen una herramienta. La trampa es silenciosa: cuando un navegador no sabe escribir el formato pedido, devuelve un PNG sin avisar. Por eso nuestras herramientas comprueban el tipo del resultado en lugar de fiarse.
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| Escribir un PNG | yes | yes | yes |
| El único formato que la especificación hace OBLIGATORIO: es además el recurso universal. | |||
| Escribir un JPEG | yes | yes | yes |
| Escribir un WebP | yes | yes | no |
| Chrome 50, Edge 79, Firefox 96. NINGUNA versión de Safari, ni en Mac ni en iPhone, sabe escribir un WebP desde un lienzo. Es la línea más útil de toda esta matriz: un conversor que anuncia «WebP» sin decir esto le estaría mintiendo a uno de cada dos visitantes de iPhone. | |||
| Escribir un AVIF | no | no | no |
| Línea CORREGIDA el 30/07/2026. La afirmación de que Chrome sabría escribir un AVIF desde un lienzo a partir de su versión 124 circula por todas partes, copiada de sitio en sitio, y no hemos encontrado NINGUNA fuente de primera mano: ni entrada en el registro de funciones de Chrome, ni nota de versión, ni página de compatibilidad dedicada. Por eso nuestras herramientas no se apoyan en ella: MIDEN al ejecutarse lo que el navegador sabe escribir en vez de suponerlo. Si mañana un navegador lo ofrece, la herramienta de conversión lo propondrá sin que cambie una línea de código. | |||
Las capacidades del navegador de las que dependen las herramientas
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| Cifrado nativo (AES-GCM, clave derivada de una contraseña, SHA-256) | yes | yes | yes |
| Disponible en todas partes desde 2017, pero SOLO en una página servida por HTTPS. Es el caso de este sitio. | |||
| Compresión y descompresión nativas (gzip, deflate) | yes | yes | yes |
| Disponible en todos los navegadores. Precisión útil añadida el 30/07/2026: la variante de deflate EN BRUTO, la única que sirve para fabricar un zip, llegó más tarde que el resto (Chrome 103, Firefox 113, Safari 16.4). Un código de zip escrito entre 2020 y 2022 podía fallar en un Chrome que, sin embargo, anunciaba que sabía comprimir. | |||
| Tratamiento de imagen fuera de pantalla (en un hilo aparte) | yes | yes | yes |
| Chrome 69, Firefox 105, Safari 16.4. Es lo que evita que la página se quede congelada con un archivo grande. | |||
| Lectura de códigos de barras y de códigos QR por el sistema | partly | no | no |
| Endurecida el 30/07/2026, y es más severa de lo que escribíamos antes. Esta función no es una norma de la web: se apoya en el sistema operativo, así que solo existe en Chromium sobre macOS, ChromeOS y Android. FALTA en Windows y en Linux, o sea en la mayoría de los ordenadores de sobremesa. Firefox no la ha implementado nunca. Safari tiene una versión experimental oculta desde la 17, y está ROTA desde iOS 18. Una herramienta de código QR no puede apoyarse en ella: tendría que llevar dentro su propia lectura. | |||
| Guardar con la ventana «Guardar como» de verdad | yes | no | no |
| Solo Chromium; Firefox y Safari han rechazado esta interfaz. El recurso es la descarga de siempre, que funciona en todas partes: es la que usan nuestras herramientas por defecto. | |||
| Calcular la huella de un archivo trozo a trozo | no | no | no |
| El navegador calcula muy bien una huella SHA-256, pero SOLO sobre un archivo entero entregado de una vez: no existe ninguna función para irla alimentando poco a poco. Eso es lo que impone un límite de peso a la herramienta de huella, y ese límite lleva escrito ese porqué. | |||
| Cifrar un archivo en flujo, sin cargarlo entero | no | no | no |
| El mismo límite que para la huella: el cifrado del navegador trabaja sobre un bloque completo, y la petición de una versión en flujo lleva abierta desde 2016 sin respuesta. Trocearlo uno mismo es posible, pero cada trozo tiene que quedar atado a su posición, si no se pueden quitar o reordenar trozos sin que el sello se entere. Nuestra herramienta de cifrado prefiere anunciar un límite de peso honesto antes que improvisar una construcción de ese tipo. | |||
| Fabricación de clave moderna (Argon2) en el navegador | no | no | no |
| Argon2 es hoy la primera opción recomendada para fabricar una clave a partir de una contraseña, y no existe en NINGÚN navegador: habría que llevar dentro un motor WebAssembly. Por eso nuestra herramienta de cifrado emplea PBKDF2 con SHA-256 y 600 000 pasadas, el valor publicado en 2026 por la referencia del campo, y lo MUESTRA en pantalla en lugar de dejar creer algo mejor. | |||
| Escribir un archivo de icono ICO desde un lienzo | no | no | no |
| Ningún navegador sabe escribir un ICO: hay que montar el contenedor a mano alrededor de imágenes PNG. El PNG dentro de un ICO se acepta desde Windows Vista y desde Firefox 9; para Chrome, Edge y Safari solo hemos encontrado pruebas de uso, no fuentes de ingeniería. Conviene saberlo antes de prometer un generador de iconos. | |||
| Calcular un CRC-32, obligatorio dentro de un zip | no | no | no |
| El navegador solo ofrece huellas criptográficas (SHA-1 y SHA-2). Así que el CRC-32 que un archivo zip exige en cada una de sus cabeceras hay que escribirlo a mano, en JavaScript corriente. Se hace en unas treinta líneas, y es la única pieza que falta para fabricar un zip sin biblioteca. | |||
Los límites de memoria, los que de verdad tiran abajo una pestaña
No están escritos en ninguna norma, y por eso tantos conversores se caen en silencio en el teléfono. Cada herramienta de este sitio anuncia SU límite, y se niega con educación por encima de él.
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| Superficie máxima de un lienzo | yes | yes | partly |
| En iPhone y iPad, la superficie de un lienzo estuvo mucho tiempo limitada a 16,7 millones de píxeles (o sea 4096 por 4096); iOS 18 la subió a 67,1 millones. Una foto de 50 megapíxeles todavía pasa del límite antiguo: una herramienta que redibuja la imagen tiene que reducirla antes, o decir que no. | |||
| Memoria total que se puede dar a los lienzos | yes | yes | partly |
| Safari en iOS limita el conjunto de lienzos de una pestaña, en torno a unos cientos de megabytes según el dispositivo. Por eso un tratamiento por lotes tiene que liberar cada imagen antes de pasar a la siguiente, y no solo al final. | |||
El PDF en un navegador, y el estado real de las bibliotecas
El navegador no sabe hacer NADA con un PDF, aparte de mostrarlo. Cualquier manipulación pide código llevado dentro, y esa es la única excepción que la doctrina de este sitio autoriza. Esto es lo que estableció la comprobación del 30 de julio de 2026, y por qué el rincón del PDF esperaba una decisión en vez de abrirse a medias.
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| Unir, dividir o modificar un PDF sin ninguna biblioteca | no | no | no |
| Nada dentro de un navegador lee la estructura de un PDF. Mostrar no es leer: el visor integrado no le presta ninguna de sus capacidades a una página web. | |||
| La biblioteca de manipulación que la ficha del proyecto tenía prevista | partly | partly | partly |
| HECHO NUEVO, Y CAMBIA LA DECISIÓN. Esta biblioteca tiene licencia MIT y sabe hacer muchas cosas: unir, dividir, girar, dibujar, rellenar formularios, escribir los metadatos. Pero su última versión publicada es de NOVIEMBRE DE 2021, y su autor está ilocalizable desde mayo de 2024: el código que el proyecto pensaba llevar dentro no ha recibido ni una corrección en más de cuatro años. NO sabe cifrar NI descifrar un PDF, exactamente como dice su propia documentación. | |||
| Poner o quitar una contraseña en un PDF | partly | partly | partly |
| Técnicamente POSIBLE en local, cosa que no creíamos. Una continuación mantenida de esa biblioteca, también con licencia MIT, implementa el cifrado de un PDF hasta AES-256 y sabe abrir un documento protegido. Así que ya no es una imposibilidad técnica: se ha convertido en una decisión, la de llevar dentro una continuación joven en lugar del código que nombraba la doctrina, y hacer de ella la única dependencia de este sitio durante años. Esa decisión es de la asociación, no del taller. | |||
| Convertir las páginas de un PDF en imágenes | partly | partly | partly |
| Imposible con una biblioteca de manipulación, que no es un motor de dibujo. Habría que llevar dentro el motor del visor de Firefox, o sea alrededor de 1,7 megabytes de código antes de comprimir, para una sola herramienta: el peso de un sitio entero. Está para volver a estudiarlo aparte, nunca a escondidas. | |||
| Aligerar de verdad un PDF | partly | partly | partly |
| Una biblioteca de manipulación puede agrupar los objetos internos de un documento, lo que gana un poco en un PDF lleno de formularios. NO vuelve a comprimir ni las imágenes NI las tipografías, que son la inmensa mayoría del peso de un PDF corriente. En un documento escaneado no hay casi nada que ganar, y una herramienta que prometiera lo contrario estaría mintiendo. | |||
| Limpiar DE VERDAD los metadatos de un PDF | partly | partly | partly |
| Dos trampas que solo se ven leyendo el código. Primero, la biblioteca reescribe por su cuenta un productor y una fecha de modificación cada vez que abre el archivo, aunque nadie se lo haya pedido. Segundo, NUNCA toca el bloque de metadatos moderno de un PDF, el que puede llevar el mismo título y el mismo autor que el resto: una limpieza que se parase en el primero sería falsa, y habría que demostrarlo releyendo el archivo producido. | |||
| Dibujar una página de PDF como imagen (rasterizar) con la biblioteca que lleva dentro | no | no | no |
| La biblioteca del rincón del PDF FABRICA archivos PDF, no pinta sus páginas: su interfaz pública no exporta ningún símbolo de dibujo. Rasterizar pide un segundo motor, cuyo peso real medido sobre los archivos que publica es de 1,72 MB minimizado (454 669 B para la interfaz, 1 262 398 B para el proceso de trabajo), unos 502 KB comprimido. Por eso «de PDF a imágenes» queda descartado, y escrito. | |||
| Cifrar un PDF con AES-256 en el navegador, y abrirlo | yes | yes | yes |
| Posible con la biblioteca que lleva dentro, PERO solo en revisión 5 (extensión de Adobe de 2008), no en la revisión 6 de la norma PDF 2.0. La revisión 5 comprueba la contraseña con UNA SOLA pasada de SHA-256; la 6 emplea una huella iterada, y las mediciones públicas de herramientas de ataque dan cuatro o cinco órdenes de magnitud de diferencia en velocidad de prueba. La revisión 5 es la única que la norma PDF 2.0 declara obsoleta. El algoritmo depende de la CABECERA del archivo: está medido, solo la cadena «1.7ext3» activa el AES-256, y sin ella sale RC4 o AES-128. | |||
| Abrir un PDF cifrado con AES-256 revisión 5 en el lector integrado del navegador | yes | yes | partly |
| Comprobado en el CÓDIGO FUENTE de los motores: PDFium (Chrome, Edge) trata la revisión 5 ya en su comprobación de contraseña, y pdf.js (Firefox) lleva una clase dedicada a la revisión 5, distinta de la de la revisión 6. Adobe Acrobat lo abre desde la versión 9. Para la Vista Previa de macOS y de iOS, y para los lectores de Android, NO se ha encontrado ninguna fuente de primera mano: por eso la columna de Safari dice «en parte», y el sitio no afirma nada más. | |||
| Escribir texto con acentos o no latino en un PDF sin llevar dentro un motor de tipografías | partly | partly | partly |
| Sin el motor de tipografías que la biblioteca pide para cualquier tipografía personalizada (y que nosotros no llevamos dentro), solo existen las 14 tipografías estándar del PDF, en Windows-1252: unos 218 caracteres latinos. Un carácter fuera de ese juego NO provoca un error en la versión que se entrega: el código atrapa la excepción y escribe un signo de interrogación. Por eso una herramienta que escribe texto tiene que validar lo que recibe y NOMBRAR lo que no sabe escribir. | |||
| Impedir de verdad que un PDF se imprima o se copie | no | no | no |
| El formato permite escribir esas prohibiciones dentro del archivo, pero no son más que peticiones hechas al lector: el contenido se descifra nada más abrirlo, y un lector que se salte la petición imprime igual. Ninguna herramienta, local o remota, puede hacerlo mejor. Por eso el sitio no ofrece esas casillas. | |||
Lo que hemos descartado, y por qué
Un sitio honesto sobre sus límites sirve más que un sitio que lo promete todo. Esto es lo que hemos decidido no hacer, con la razón de cada decisión. Estas líneas no se moverán mientras no cambie la razón.
- El reconocimiento de texto dentro de una imagen, y la lectura de las fotos HEIC de iPhone: los motores necesarios pesan entre diez y quince megabytes. Con una conexión floja, descargar quince megabytes para leer un texto es un mal negocio. Está para volver a estudiarlo, nunca a escondidas.
- El vídeo, en todas sus formas: los motores de conversión de vídeo dentro de un navegador pesan unos treinta megabytes. No.
- El borrado de fondo con inteligencia artificial: pide descargar un modelo, y un modelo es un archivo pesado y opaco. No.
- Todo lo que EXIGE la red por naturaleza: acortar un enlace, desplegar un enlace corto, preguntar quién es el dueño de un dominio, mostrar la vista previa de una página remota. Esas herramientas no pueden ser locales, así que no están aquí. No es una carencia, es la definición del proyecto.
- Enseñar un mapa para situar una foto: sería la única petición saliente del sitio, y llevaría encima la información más delicada del archivo. Las coordenadas se muestran en claro, y usted decide qué hacer con ellas.
- CONVERTIR UN PDF EN IMÁGENES: habría que DIBUJAR las páginas, y dibujar un PDF es un oficio entero (tipografías, vectores, transparencias, espacios de color). La biblioteca que llevamos dentro sabe fabricar un PDF, no pintar una de sus páginas. El único motor de dibujo serio de la web pesa, medido sobre los archivos que publica, 1,72 MB minimizado solo para eso. El sentido contrario, de imágenes a PDF, está puesto y funciona.
- FIRMAR UN PDF: por la misma razón, y es la más frustrante. Sin motor de dibujo no se puede ENSEÑAR la página; y sin enseñarla no se puede dejar que alguien ponga su firma donde quiera. Una firma soltada a ciegas en unas coordenadas fijas sería peor que inútil. Preferimos un puesto vacío a una herramienta que estropea un documento.
- LEER UN CÓDIGO QR: la función que ofrecen los navegadores se apoya en el sistema operativo. Así que solo existe en una parte de Chromium, en macOS, ChromeOS y Android; falta en Windows y en Linux, Firefox no la ha implementado nunca, y la versión experimental de Safari está rota desde iOS 18. Una herramienta que se apoyara en ella no funcionaría para la mayoría de quienes visitan el sitio desde un ordenador de sobremesa. FABRICAR un código QR, en cambio, sigue en el plano: se puede hacer a mano, y la norma es de uso libre.
- PROHIBIR LA IMPRESIÓN O LA COPIA DE UN PDF: el formato lo permite, y muchas herramientas enseñan esas casillas porque tranquilizan. No son más que peticiones hechas al lector: el contenido se descifra nada más abrirlo, y un lector que se salte la petición imprime igual. Vender una cerradura que es una pegatina sería exactamente el tipo de mentira que este sitio existe para no decir.
- GRABAR CON EL MICRÓFONO, la mitad «grabadora» del puesto 34: la anatomía de una página de herramienta de este sitio ofrece UNA entrada por herramienta, un archivo, un texto o nada, y cada franja de confianza habla exactamente de esa entrada. Un micrófono sería una cuarta, con su propia promesa por escribir. Sobre todo, la máquina que comprueba este sitio antes de cada publicación no tiene micrófono: no podríamos PROBAR que una grabación no sale, y no publicamos promesas que no sabemos poner a prueba. Por eso el puesto 34 es «recortar una grabación», y su aparato se queda con el trabajo que ya hace muy bien.
- EL VISOR GIGANTE PARA PROYECTOR del temporizador de aula: el carácter más grande de nuestra guía gráfica es el de los bloques de contador, y no se dibujó para leerse desde el fondo de un aula. Un visor gigante sería un componente gráfico nuevo, la guía está congelada, y una carencia se anota en lugar de inventarse sobre la marcha dentro de una herramienta. El modo pantalla completa existe y ocupa toda la pantalla, pero no agranda las cifras, y la página lo dice dos veces. Es una petición, está anotada, no está enterrada.
- LA RULETA ANIMADA del sorteo, por la misma razón: es un componente que la guía no tiene. Y una ruleta no hace un sorteo más justo, lo pone en escena. Lo que hace justo un sorteo es el generador de azar que se emplea y la ausencia de sesgo, y la herramienta enseña las dos cosas con su cálculo: una posibilidad entre n, n factorial órdenes posibles.
- EL CALENDARIO PARA PULSAR de la calculadora de fechas: nuestra guía no tiene dibujado ningún campo de fecha, y un campo de fecha nativo del navegador llegaría con su borde y su altura propios, fuera de la guía. Así que las fechas se escriben en formato internacional, lo que tiene una ventaja real: «03/04» significa el 3 de abril en media parte del mundo y el 4 de marzo en la otra.
- LOS DÍAS FESTIVOS en la calculadora de fechas: cambian de un país a otro, a veces de una región a otra dentro del mismo país, sus fechas se mueven cada año, y un festivo que cae en fin de semana suele dar un día de sustitución que se decide caso por caso. Una lista congelada estaría equivocada en doce meses, y este proyecto se dirige a un público mundial. Por eso los días laborables que se cuentan van de lunes a viernes, sin excepción, y está escrito en la página.
- EL PUNTO TIPOGRÁFICO DIDOT en el conversor de unidades, y es la diferencia más reveladora: ningún organismo de metrología lo define, y las obras que lo citan dan cuatro valores distintos. Cuando cuatro fuentes secundarias se contradicen y no existe ninguna fuente de primera mano, no hay nada que copiar. El punto de la web, en cambio, vale exactamente un setenta y dosavo de pulgada, y está escrito negro sobre blanco en una especificación.
- LA PROTECCIÓN CON CONTRASEÑA DE UN ARCHIVO ZIP, en los dos sentidos: el cifrado histórico del formato está roto desde 1994 por un ataque publicado, y el cifrado moderno es una extensión propietaria con varias variantes. Haríamos un trabajo pesado para dar una protección de la que no podríamos decir con honestidad que es sólida. La herramienta de cifrado del rincón de seguridad resuelve el problema de verdad, y enseña su método entero.
Las decisiones del rincón del PDF, y con qué pruebas
Se han tomado tres decisiones para abrir el rincón del PDF, y cada una cuesta algo. Aquí están, con lo que la comprobación ha establecido de verdad. Una decisión que no dice en qué se apoya no es una decisión, es una opinión.
PRIMERA DECISIÓN: ESTE SITIO LLEVA DENTRO UNA BIBLIOTECA, Y SOLO UNA. Escribir un PDF a mano no es razonable: es un formato de objetos indirectos, de tablas de referencias cruzadas y de flujos comprimidos, donde un error de un byte deja el archivo ilegible. Es la excepción que la doctrina del proyecto autoriza, y es la única que se ha tomado. El código lo SERVIMOS NOSOTROS, nunca una red de distribución: las páginas del rincón del PDF lo cargan desde este sitio, su versión está congelada en el nombre del archivo para que un cambio de versión no pueda ser silencioso, su licencia libre se sirve al lado, y su peso exacto se mide en el disco cada vez que se construye el sitio, un poco más abajo en esta página.
Hemos comprobado una cosa más, a máquina: ese archivo no contiene NINGUNA llamada de red, ni una sola, y el control de contenido lo vuelve a comprobar en cada construcción, sobre el archivo en bruto, sin quitar siquiera los comentarios. Una biblioteca que se lleva dentro se controla como una herramienta, y hasta con más dureza.
SEGUNDA DECISIÓN: LA VERSIÓN. La biblioteca que nombraba la doctrina de origen no ha recibido ni una corrección desde noviembre de 2021 y su autor está ilocalizable desde mayo de 2024: hemos cogido la continuación mantenida, con la misma licencia libre. Entre dos versiones de esa continuación no hemos cogido la más reposada sino la más reciente, y por una razón concreta: la versión anterior fabricaba el identificador interno de un documento protegido a partir de la HORA de guardado, resumida en una huella. Un identificador así se remonta por fuerza bruta, o sea que habría fechado cada archivo cifrado al milisegundo. En un sitio cuya promesa es que no se escapa nada, eso lo descalificaba. La versión elegida saca ese identificador al azar.
TERCERA DECISIÓN, Y ES LA QUE MÁS CUESTA: LA CONTRASEÑA DE UN PDF NO ESTÁ AL MEJOR NIVEL DE LA NORMA, Y LO DECIMOS ANTES DE ACTUAR. El PDF conoce dos maneras de hacer AES-256: la revisión 5, publicada por Adobe en 2008, y la revisión 6 de la norma PDF 2.0. El algoritmo de cifrado es el mismo; lo que cambia es la verificación de la contraseña. La revisión 5 la hace en un solo cálculo, la revisión 6 la ralentiza a propósito, y las medidas publicadas de herramientas de ataque dan cuatro o cinco órdenes de magnitud de diferencia en velocidad de prueba. La biblioteca solo escribe la revisión 5, que es además la única que la norma PDF 2.0 declara obsoleta.
Podríamos haber escrito «AES-256» y callarnos, como hace la mayoría de los sitios que ofrecen este gesto. Hemos preferido enseñar la revisión, la longitud de clave y la manera de fabricar la clave ANTES de que se pulse el botón, y remitir a la fabricación de una frase de contraseña de verdad. Con una palabra corta, esta herramienta no protege nada; con una frase de varias palabras sacadas al azar, protege de verdad. La diferencia está en su mano, siempre que se la hayan contado.
UNA TRAMPA MEDIDA, Y HABRÍA SIDO INVISIBLE. Al guardar un documento cifrado de cierta manera, esta biblioteca deja el título, el autor y el programa del documento LEGIBLES EN CLARO dentro del archivo protegido: se ven con un simple editor de texto. Lo descubrimos releyendo los bytes de nuestros propios archivos de salida, no en una documentación. Así que la herramienta guarda de la única manera que no se escapa, quita la ficha de identidad antes de cifrar, y el control de calidad busca ahora esos valores en claro dentro de CADA archivo producido. Un control que solo hubiera leído el código no habría visto nada.
Las bibliotecas que lleva dentro
La regla de la casa es cero dependencias. Una biblioteca puede llevarse dentro por excepción, cuando escribir el código a mano no sería razonable: nunca desde un servidor de un tercero, siempre en versión congelada, con la licencia comprobada y el peso anunciado aquí.
@cantoo/pdf-lib 2.8.1
le coin PDF · Licence MIT · 661.4 KB
Écrire un PDF à la main est déraisonnable : c'est un format d'objets indirects, de tables de références croisées et de flux compressés, et une erreur d'un octet rend le fichier illisible. C'est l'exception que la doctrine autorise, et c'est la seule. Cette bibliothèque est le prolongement MAINTENU de pdf-lib, dont la dernière version date de novembre 2021 : nous avons choisi le code vivant. La version est figée dans le nom du fichier, la licence MIT est servie à côté, et le code est là, chez nous : les pages du coin PDF le chargent depuis ce site, jamais depuis ailleurs. Nous avons vérifié une chose de plus, à la machine : ce fichier ne contient AUCUN appel réseau, pas un seul, et le verrou du contenu le re-vérifie à chaque build.
Las fuentes de la matriz
Cada línea de la matriz se ha comprobado en una fuente pública. Aquí están, para que la comprobación se pueda repetir sin nosotros.
- Guía de los formatos de imagen (MDN)
https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types - Escribir un WebP desde un lienzo: tabla de compatibilidad
https://caniuse.com/mdn-api_htmlcanvaselement_toblob_type_parameter_webp - canvas.toBlob (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob - Compresión nativa: disponible en todos los navegadores (web.dev)
https://web.dev/blog/compressionstreams - Cifrado nativo (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto - Lectura de códigos de barras (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/Barcode_Detection_API - Ventana «Guardar como» (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/Window/showSaveFilePicker - Tratamiento fuera de pantalla (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas - La orientación EXIF según los formatos
https://zpl.fi/exif-orientation-in-different-formats/ - El contenedor WebP (especificación)
https://developers.google.com/speed/webp/docs/riff_container - pdf-lib: lo que sabe hacer la biblioteca
https://github.com/Hopding/pdf-lib - Superficie máxima de un lienzo en iOS
https://pqina.nl/blog/canvas-area-exceeds-the-maximum-limit/ - Serializar un lienzo en archivo (norma HTML)
https://html.spec.whatwg.org/multipage/canvas.html - Almacenamiento de contraseñas: los parámetros recomendados
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html - Fabricar una clave a partir de una contraseña (NIST SP 800-132)
https://csrc.nist.gov/pubs/sp/800/132/final - Cifrar con la interfaz del navegador
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt - Cifrar en flujo: la petición que sigue abierta
https://github.com/w3c/webcrypto/issues/73 - Compresión nativa: la tabla de compatibilidad
https://caniuse.com/mdn-api_compressionstream_compressionstream - El formato de archivo ZIP (especificación)
https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.2.TXT - El formato de icono ICO, y el PNG que va dentro
https://devblogs.microsoft.com/oldnewthing/20101022-00/?p=12473 - ¿Sigue viva la biblioteca PDF? (discusión)
https://github.com/Hopding/pdf-lib/discussions/1631 - La continuación mantenida de la biblioteca PDF
https://github.com/cantoo-scribe/pdf-lib - Lectura de códigos de barras: qué significa la compatibilidad real
https://developer.chrome.com/docs/capabilities/shape-detection - El suplemento de Adobe a la norma ISO 32000: el cifrado AESV3 de la extensión 3
https://www.loc.gov/preservation/digital/formats/fdd/fdd000313.shtml - pdf.js: el código de las dos revisiones del cifrado AES-256 de un PDF
https://github.com/mozilla/pdf.js/blob/master/src/core/crypto.js - PDFium: la comprobación de contraseña AES-256 del motor de Chrome
https://github.com/chromium/pdfium/blob/main/core/fpdfapi/parser/cpdf_security_handler.cpp - La norma ISO 32000-1: los flujos de objetos (§7.5.7) y las imágenes (§8.9.5)
https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf - qpdf: por qué la revisión 5 solo debería servir para probar la compatibilidad
https://qpdf.readthedocs.io/en/stable/encryption.html