2010-09-09 4 views
7

J'ai besoin de crypter et décrypter des fichiers pdf. Existe-t-il une API Java gratuite ou bon marché? Fondamentalement, j'ai besoin de cacher les fichiers des utilisateurs normaux. Toute autre suggestion sur la réalisation de ce programme?Java API pour crypter/décrypter des fichiers pdf

Merci, profonde

+1

comment comptez-vous les montrer aux utilisateurs "anormaux"? Ils devraient apporter leurs clés privées (éventuellement des cartes à puce) avec eux? – Bozho

Répondre

6

En utilisant 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); 

est ici l'API pour PDFEncryptor et PDFWriter (pour les autorisations).

+0

Merci Frederik. Pouvez-vous également fournir du code pour décrypter le fichier crypté? –

+0

Pour quelle version d'iText est-ce viable? – demaniak

+0

On dirait qu'iText a changé un peu depuis que cette réponse a été acceptée. [Voici] (http://developers.itextpdf.com/examples/security/clone-encrypting-decrypting-pdfs) un exemple de cryptage et décryptage dans iText 7. Et [ici] (http://itextsupport.com /apidocs/itext7/7.0.0/) est l'emplacement mis à jour des documents de l'API. –

5

iText prend en charge le cryptage.

6

En utilisant PDFBox (basé sur le code Decrypt.java):

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(); 
    } 
}