verificación google

jueves, 5 de febrero de 2009

Poner clave a un PDF

Después de mucho darle vueltas al tema lo he conseguido.

Necesitaba un programa para ejecuar desde linea de comandos que le pasara un PDF y le pusiera una clave. Encontré multitud de programas que lo hacían en entorno de escritorio, incluso encontré uno que lo hacía desde linea de comandos (PdfEncrypt). Pero este último lanzaba unas ventanas muy molestas cada vez que encriptaba un PDF.

Entonces fue cuando decidí crear mi propio encriptador de PDFs. Y buscando encontré unas librerías en Java para la manipulación de PDFs (itext) y además de otras muchas cosas podía encriptar PDFs. Así que me puse manos a la obra y este fue el resultado.
import java.io.FileOutputStream;
import java.io.File;
import com.lowagie.text.pdf.PdfEncryptor;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
/**
* Encriptador de PDFs
* @author José Manuel Ruiz Baena
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String PdfOriginal,PdfEncriptado,Clave;
try{
PdfOriginal = args[0];
PdfEncriptado = args[1];
Clave = args[2];
}catch(Exception ex){
ayuda();
return;
}

try{
File pdf = new File(PdfOriginal);
if(pdf.exists()){
PdfReader reader = new PdfReader(PdfOriginal);
PdfEncryptor.encrypt(reader,
new FileOutputStream(PdfEncriptado),
Clave.getBytes(),
"".getBytes(),
PdfWriter.ALLOW_PRINTING,
false);
}else
System.out.println("El fichero no existe");
}catch ( Exception e ) {
e.printStackTrace();
}
}
//Ayuda, explica el orden a seguir para pasar los parámetros a la aplicación
public static void ayuda(){
System.out.println("Necesita definir algunos argumentos para que la aplicacion funcione correctamente.");
System.out.println("1- Ruta del PDF a encriptar");
System.out.println("2- Ruta del PDF destino");
System.out.println("3- Clave ");
}
}

Para crear tu propio encriptador de PDFs lo primero que tienes que hacer es descargar las librerías .jar de iText. Son algunos pasos, aquí tienes el primer .jar y después tendrás que descargar el resto con svn, aquí tienes explicado como hacerlo.

Una vez que tengas todas las librerías .jar te creas un proyecto en tu IDE y pegas el código que he puesto arriba. Después tendrás que incluir las librerías descargadas.

Teóricamente ya podrás ejecutar la aplicación que encripta PDFs, pero tendrás que pasarle los argumentos oportunos. Según el IDE de desarrollo que uses se hará una u otra forma.

Una vez construido el proyecto podrás ejecutarlo desde la linea de comandos con:
java -jar EncriptadorPDF < ruta pdf original > < ruta pdf encriptado > < clave >
Yo he usado NetBeans, porque con Eclipse al crear el .jar y ejecutarlo me marcaba errores del tipo "no encuentro la clases...", así que lo intenté con NetBeans y sin problemas. Simplemente construir el proyecto y él solo me crea el .jar con mi código fuente y un directorio lib con los .jar de itext.

7 comentarios:

  1. Funciona bastante bien, gracias!

    ResponderEliminar
  2. La verdad que fue un comedero de cabeza muy fuerte, pero al final encontré la librería y desarrollé la aplicación.

    ResponderEliminar
  3. Gracias, me ha ayudado muchisimo.!

    ResponderEliminar
  4. Buenas, yo estoy usando iText. Cuantas librerías hay que terminar importando??
    Lo he intentado de varias maneras y siempre me da error.

    Muchas gracias, UN saludo

    ResponderEliminar
  5. Únicamente las que contengan:

    java.io.FileOutputStream;
    java.io.File;
    com.lowagie.text.pdf.PdfEncryptor;
    com.lowagie.text.pdf.PdfReader;
    com.lowagie.text.pdf.PdfWriter;

    Cuando estén todas ya lo tendrás.

    ResponderEliminar
  6. Hola, soy un novato en todo esto, pero quisiera saber si puedo utilizar esto para descifrar un PDF protegido contra copia, impresión y hasta visualización que no sea en un navegador con JAVA.

    ResponderEliminar
  7. Veamos, este código se utiliza para cifrar el PDF y que solicite una clave de descifrado para abrirlo.

    Si está bloqueado, supongo que podrás cifrarlo y que solicite también una clave para visualizar el contenido.

    De todos modos si quieres descifrar algo lo principal es tener la clave de descifrado, pero sospecho que no es el caso. ¿verdad?

    Si es así, nunca me he visto en la tesitura de tener que crackear un PDF y no puedo ayudarte.

    Saludos.

    ResponderEliminar