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