Encrypting / Decrypting PDFs
These examples were written in answer to questions such as:
decryptpdf
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.security;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.ReaderProperties;
import java.io.File;
public class DecryptPdf {
public static final String DEST = "./target/sandbox/security/decrypt_pdf.pdf";
public static final String SRC = "./src/main/resources/pdfs/hello_encrypted.pdf";
public static final String OWNER_PASSWORD = "World";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new DecryptPdf().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
try (PdfDocument document = new PdfDocument(
new PdfReader(SRC, new ReaderProperties().setPassword(OWNER_PASSWORD.getBytes())),
new PdfWriter(dest)
)) {
byte[] userPasswordBytes = document.getReader().computeUserPassword();
// The result of user password computation logic can be null in case of
// AES256 password encryption or non password encryption algorithm
String userPassword = userPasswordBytes == null ? null : new String(userPasswordBytes);
System.out.println(userPassword);
}
}
}
C#
C#
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;
namespace iText.Samples.Sandbox.Security
{
public class DecryptPdf
{
public static readonly String DEST = "results/sandbox/security/decrypt_pdf.pdf";
public static readonly String SRC = "../../../resources/pdfs/hello_encrypted.pdf";
public static readonly String OWNER_PASSWORD = "World";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new DecryptPdf().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
using (PdfDocument document = new PdfDocument(
new PdfReader(SRC, new ReaderProperties().SetPassword(Encoding.UTF8.GetBytes(OWNER_PASSWORD))),
new PdfWriter(dest)
))
{
byte[] computeUserPassword = document.GetReader().ComputeUserPassword();
// The result of user password computation logic can be null in case of
// AES256 password encryption or non password encryption algorithm
String userPassword = computeUserPassword == null ? null : Encoding.UTF8.GetString(computeUserPassword);
Console.Out.WriteLine(userPassword);
}
}
}
}
decryptpdf2
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.security;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.StampingProperties;
import java.io.File;
public class DecryptPdf2 {
public static final String DEST = "./target/sandbox/security/decrypt_pdf2.pdf";
public static final String SRC = "./src/main/resources/pdfs/encrypt_pdf_without_user_password.pdf";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new DecryptPdf2().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
// This is not actually a decrypt example.
// The old iText5 test shows how to open an encrypted pdf document
// without user password for modifying with preserving an old owner password
try (PdfDocument document = new PdfDocument(
new PdfReader(SRC).setUnethicalReading(true),
new PdfWriter(dest),
new StampingProperties().preserveEncryption()
)) {
// here we can modify the document
}
}
}
C#
C#
using System;
using System.IO;
using iText.Kernel.Pdf;
namespace iText.Samples.Sandbox.Security
{
public class DecryptPdf2
{
public static readonly String DEST = "results/sandbox/security/decrypt_pdf2.pdf";
public static readonly String SRC = "../../../resources/pdfs/encrypt_pdf_without_user_password.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new DecryptPdf2().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
// This is not actually a decrypt example.
// The old iText5 test shows how to open an encrypted pdf document
// without user password for modifying with preserving an old owner password
PdfReader reader = new PdfReader(SRC);
reader.SetUnethicalReading(true);
using (PdfDocument document = new PdfDocument(
new PdfReader(SRC).SetUnethicalReading(true),
new PdfWriter(dest),
new StampingProperties().PreserveEncryption()
))
{
// here we can modify the document
}
}
}
}
decryptpdf3
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.security;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import java.io.File;
public class DecryptPdf3 {
public static final String DEST = "./target/sandbox/security/decrypt_pdf3.pdf";
public static final String SRC = "./src/main/resources/pdfs/encrypt_pdf_without_user_password.pdf";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new DecryptPdf3().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC).setUnethicalReading(true), new PdfWriter(dest));
pdfDoc.close();
}
}
C#
C#
using System;
using System.IO;
using iText.Kernel.Pdf;
namespace iText.Samples.Sandbox.Security
{
public class DecryptPdf3
{
public static readonly String DEST = "results/sandbox/security/decrypt_pdf3.pdf";
public static readonly String SRC = "../../../resources/pdfs/encrypt_pdf_without_user_password.pdf";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new DecryptPdf3().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument document = new PdfDocument(new PdfReader(SRC).SetUnethicalReading(true), new PdfWriter(dest));
document.Close();
}
}
}
encryptpdf
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.security;
import com.itextpdf.kernel.pdf.EncryptionConstants;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;
import java.io.File;
public class EncryptPdf {
public static final String DEST = "./target/sandbox/security/encrypt_pdf.pdf";
public static final String SRC = "./src/main/resources/pdfs/hello.pdf";
public static final String OWNER_PASSWORD = "World";
public static final String USER_PASSWORD = "Hello";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new EncryptPdf().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(
new PdfReader(SRC),
new PdfWriter(dest, new WriterProperties().setStandardEncryption(
USER_PASSWORD.getBytes(),
OWNER_PASSWORD.getBytes(),
EncryptionConstants.ALLOW_PRINTING,
EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA))
);
pdfDoc.close();
}
}
C#
C#
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;
namespace iText.Samples.Sandbox.Security
{
public class EncryptPdf
{
public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
public static readonly String SRC = "../../../resources/pdfs/hello.pdf";
public static readonly String OWNER_PASSWORD = "World";
public static readonly String USER_PASSWORD = "Hello";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new EncryptPdf().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
new WriterProperties().SetStandardEncryption(
Encoding.UTF8.GetBytes(USER_PASSWORD),
Encoding.UTF8.GetBytes(OWNER_PASSWORD),
EncryptionConstants.ALLOW_PRINTING,
EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA
)));
document.Close();
}
}
}
encryptpdfwithoutuserpassword
JAVA
JAVA
/*
This file is part of the iText (R) project.
Copyright (c) 1998-2023 Apryse Group NV
Authors: Apryse Software.
For more information, please contact iText Software at this address:
sales@itextpdf.com
*/
package com.itextpdf.samples.sandbox.security;
import com.itextpdf.kernel.pdf.EncryptionConstants;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;
import java.io.File;
public class EncryptPdfWithoutUserPassword {
public static final String DEST = "./target/sandbox/security/encrypt_pdf_without_user_password.pdf";
public static final String SRC = "./src/main/resources/pdfs/hello.pdf";
public static final String OWNER_PASSWORD = "World";
public static void main(String[] args) throws Exception {
File file = new File(DEST);
file.getParentFile().mkdirs();
new EncryptPdfWithoutUserPassword().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(
new PdfReader(SRC),
new PdfWriter(dest, new WriterProperties().setStandardEncryption(
// null user password argument is equal to empty string,
// this means that no user password required
null,
OWNER_PASSWORD.getBytes(),
EncryptionConstants.ALLOW_PRINTING,
EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA))
);
pdfDoc.close();
}
}
C#
C#
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;
namespace iText.Samples.Sandbox.Security
{
public class EncryptPdfWithoutUserPassword
{
public static readonly String DEST = "results/sandbox/security/encrypt_pdf_without_user_password.pdf";
public static readonly String SRC = "../../../resources/pdfs/hello.pdf";
public static readonly String OWNER_PASSWORD = "World";
public static void Main(String[] args)
{
FileInfo file = new FileInfo(DEST);
file.Directory.Create();
new EncryptPdfWithoutUserPassword().ManipulatePdf(DEST);
}
protected void ManipulatePdf(String dest)
{
PdfDocument document = new PdfDocument(
new PdfReader(SRC),
new PdfWriter(dest,
new WriterProperties().SetStandardEncryption(
// null user password argument is equal to empty string
// this means that no user password required
null,
Encoding.UTF8.GetBytes(OWNER_PASSWORD),
EncryptionConstants.ALLOW_PRINTING,
EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA
)));
document.Close();
}
}
}