2017-03-02 1 views
0

Ich verwende https://github.com/TomRoush/PdfBox-Android, um eine PDF wie beschrieben zu verschlüsseln ... aber es funktioniert nicht.Verschlüsseln einer PDF funktioniert nicht mit PdfBox-Android

Ich überprüfe das Ergebnis mit Foxit und AdobeReader. AdobeReader sagt, dass meine Datei beschädigt ist, aber Foxit zeigt mir den Passwort-Dialog. Aber dann kann ich versuchen, was ich möchte Foxit kann auch nicht meine Datei entschlüsseln.

Wenn ich keyLength = 256 setze, bekomme ich das oben beschrieben, aber ich habe auch die anderen 2 keyLength Werte versucht, aber DANN ist die Datei nicht verschlüsselt.

habe ich etwas verpasst oder funktioniert die Verschlüsselung einfach nicht mit dieser lib auf Android?

Hier ist mein Code

static { 
     Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); 
    } 

    public void createPdf() { 

    File root   = android.os.Environment.getExternalStorageDirectory(); 
    String path   = root.getAbsolutePath() + "/Download/crypt.pdf"; 


    int      keyLength = 256; 
    AccessPermission   ap   = new AccessPermission(); 
    StandardProtectionPolicy spp   = new StandardProtectionPolicy("12345", "", ap); 

    spp.setEncryptionKeyLength(keyLength); 
    spp.setPermissions(ap); 

    BouncyCastleProvider provider = new BouncyCastleProvider(); 
    Security.addProvider(provider); 

    PDFont  font  = PDType1Font.HELVETICA; 
    PDDocument document = new PDDocument(); 
    PDPage  page  = new PDPage(); 

    document.addPage(page); 

    try { 

     PDPageContentStream contentStream = new PDPageContentStream(document, page); 

     // Write Hello World in blue text 
     contentStream.beginText(); 
     contentStream.setNonStrokingColor(15, 38, 192); 
     contentStream.setFont(font, 12); 
     contentStream.newLineAtOffset(100, 700); 
     contentStream.showText("Hello World"); 
     contentStream.endText(); 
     contentStream.close(); 

     // Save the final pdf document to a file 
     document.protect(spp); 
     document.save(path); 
     document.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Dieser Android-Port basiert auf einer Version 1.8.x, nicht einige 2.0.x. Schauen Sie sich daher den [1.8.x Verschlüsselungs-Kochbucheintrag] (https://pdfbox.apache.org/1.8/cookbook/encryption.html) an, der Ihnen sagt, dass nur die Schlüssellängen 40 und 128 unterstützt werden. Was man für 256 bekommt, sollte daher nicht verwendet werden. Darüber hinaus verwendet der Android-Port SpongyCastle anstelle von BouncyCastle. Versuchen Sie also, diesen Sicherheitsanbieter zu verwenden. – mkl

+0

danke ... aber wie gesagt: ich habe auch die 40 und die 128 ausprobiert aber es geht nicht. Es verwendet auch SpongyCastle ... (ich dachte :-), weil ich [static { Security.insertProviderAt (new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); }] am Anfang meiner Aktivität ... (Ich werde meinen Code oben aktualisieren) – HowardS

+0

Beachten Sie, dass dies separate Projekte sind ... und ich bemerkte, dass das Android-Quellcode-Repository nicht über die Unit-Tests für die Verschlüsselung verfügt/Entschlüsselung :-( –

Antwort

0

Nach der Antwort auf die Anfrage von Tom here habe ich versuchen, es wieder und es scheint, wie ich nie sonst die anderen KeyLength Werte oder etwas verpasst verwendet.

So einfach nicht die Aussage verwenden

spp.setEncryptionKeyLength(keyLength); 

dann mit 40 Sie verschlüsseln oder nur

spp.setEncryptionKeyLength(128); 

verwenden, aber nun am Ende Everthing gut funktioniert !! :-)

Verwandte Themen