2010-09-09 50 views
7

Necesito cifrar y descifrar archivos PDF. ¿Hay una API de Java gratuita o de bajo costo que haga eso? Básicamente, necesito ocultar archivos de usuarios normales. ¿Alguna otra sugerencia para lograr eso programáticamente?API de Java para cifrar/descifrar archivos PDF

Gracias, profundo

+1

¿Cómo se va a mostrar a los usuarios "anormales"? Deben traer sus llaves privadas (posiblemente tarjetas inteligentes) con ellos? – Bozho

Respuesta

6

Usando iText:

// Assuming you provide the following yourself: 
    File inputFile; 
    File outputFile; 
    String userPassword; 
    String ownerPassword; 
    // A bit-field containing file permissions. 
    int permissions = PDFWriter.ALLOW_PRINTING | PDFWriter.ALLOW_COPY; 

    PdfReader reader = new PdfReader(inputFile); 
    PdfEncryptor.encrypt(reader, new FileOutputStream(outputFile), 
     ENCRYPTION_AES128, userPassword, ownerPassword, 
     permissions); 

Aquí está la API para PDFEncryptor y PDFWriter (para los permisos).

+0

Gracias Frederik. ¿También puede proporcionar código para descifrar el archivo cifrado? –

+0

¿Para qué versión de iText es esto viable? – demaniak

+0

Parece que iText ha cambiado un poco desde que se aceptó esta respuesta. [Aquí está] (http://developers.itextpdf.com/examples/security/clone-encrypting-decrypting-pdfs) un ejemplo de cómo cifrar y descifrar en iText 7. Y [aquí] (http://itextsupport.com /apidocs/itext7/7.0.0/) es la ubicación actualizada de los documentos API. –

5

iText soporta la encriptación.

6

Usando PDFBox (basado en Decrypt.java código):

PDDocument document = null; 

try 
{ 
    document = PDDocument.load(infile); 

    if(document.isEncrypted()) 
    { 
     DecryptionMaterial decryptionMaterial = null; 
     decryptionMaterial = new StandardDecryptionMaterial(password); 
     document.openProtection(decryptionMaterial); 
     AccessPermission ap = document.getCurrentAccessPermission(); 
     if(ap.isOwnerPermission()) 
     { 
      document.setAllSecurityToBeRemoved(true); 
      document.save(outfile); 
     } 
     else 
     { 
      throw new IOException(
      "Error: You are only allowed to decrypt a document with the owner password."); 
     } 
    } 
    else 
    { 
     System.err.println("Error: Document is not encrypted."); 
    } 
} 
finally 
{ 
    if(document != null) 
    { 
     document.close(); 
    } 
}