How to Encrypt and Decrypt PDF Files in Flutter
Tags: mobile, pdf, flutter, dart
Published: 2021-02-05 05:10:55

---
title: How to Encrypt and Decrypt PDF Files in Flutter
published: true
date: 2021-02-03 11:00:44 UTC
tags: mobile, pdf, flutter, dart
canonical_url: https://www.syncfusion.com/blogs/post/how-to-encrypt-and-decrypt-pdf-files-in-flutter.aspx
cover_image: https://www.syncfusion.com/blogs/wp-content/uploads/2021/01/How-to-Encrypt-and-Decrypt-PDF-Files-in-Flutter-672x372.png
---

The Syncfusion [Flutter PDF Library](https://www.syncfusion.com/flutter-widgets/pdf-library) now allows users to encrypt and decrypt PDF documents in Flutter applications.

PDF encryption allows users to protect their PDF documents from unauthorized access. These days, data theft has become a real problem. So, we need to secure important files before sending them to recipients to prevent unauthorized access to their content. And then, if a PDF document we receive is encrypted, we have to decrypt it to access its content.

There are two types of passwords that are available to protect PDF files:

- Document open password: Most PDF documents are encrypted with a user password that is required to open the documents.
- Permission password: A permission password, also known as an owner password, is used to limit the access permissions to various operations such as printing, editing, and copying content in a PDF document.

With the Syncfusion Flutter PDF Library, you can protect your PDF documents with either of these passwords, or both.

If a PDF is encrypted with both types of passwords, you can use either of the passwords to open it. But to change the restricted features, you need the permission password.

In this blog, I will show you how to encrypt and decrypt PDF files, divided into the following topics:

- [Encrypt PDF document](#encrypt-a-pdf-document)
- [Restrict PDF permissions](#restrict-pdf-permissions)
- [Decrypt or remove security from a PDF](#decrypt-or-removing-security-from-pdf)

## Encrypt a PDF document

The Syncfusion Flutter PDF Library provides support for basic (RC4) to advanced (AES) encryption standards. The following are the encryption standards supported:

- RC4 40-bit
- RC4 128-bit
- AES 128-bit
- AES 256-bit
- AES 256-bit Revision 6

Following are the steps to encrypt a PDF document using Syncfusion Flutter PDF Library.

### Step #1: Create a Flutter application

Follow the instructions provided in this [Get Started](https://flutter.dev/docs/get-started/test-drive?tab=vscode#create-app) documentation to create a basic project in Flutter.

### Step #2: Add Syncfusion Flutter PDF dependency

Include the Syncfusion Flutter PDF package dependency in the **pubspec.yaml** file in your project.

```dart
dependencies:
  syncfusion_flutter_pdf: ^18.4.30-beta
```

### Step #3: Get the packages

Run the following commands to get the required packages.

| `$ flutter pub get` |

### Step #4: Import the package

Import the PDF package into the **main.dart** file, as shown in the following code example.

```dart
import 'package:syncfusion_flutter_pdf/pdf.dart';
```

### Step #5: Encrypt PDF file

1. Add a Button widget as a child to the container widget.
```dart
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text(widget.title),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          FlatButton(
            child: Text(
              'Encrypt PDF',
              style: TextStyle(color: Colors.white),
            ),
            onPressed: _extractText,
            color: Colors.blue,
          )
        ],
      ),
    ),
  );
}
```
2. Include the following code in the button-click event to secure the PDF file.
```dart
//Load the existing PDF document.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('credit_card_statement.pdf'));
//Set the document security.
document.security.userPassword = 'Password@123';
//Save and dispose the document.
List<int> bytes = document.save();
document.dispose();
```
3. To access the PDF document, set the input document in the **assets** section of the pubspec.yaml file, as shown in the following. Here, the documents are placed inside the **assets ** folder.
```dart
# To add assets to your application, add an assets section, like this:
assets:
  - assets/credit_card_statement.pdf
  - assets/secured.pdf
```

Include the following code to read the PDF document from the folder where it is saved.

```dart
Future<List<int>> _readDocumentData(String name) async {
  final ByteData data = await rootBundle.load('assets/$name');
  return data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
}

```
4. Include the following code to launch the secured PDF file.a.  Add the following package dependencies in the pubspec.yaml file in your project.
```dart
open_file: ^3.0.1
path_provider: ^1.6.5
```

b. Import the following packages in your main.dart file.

```dart
import 'dart:io';
import 'package:open_file/open_file.dart';
import 'package:path_provider/path_provider.dart';
```

c. Include the following code to launch the output PDF document.

```dart
//Get the external storage directory.
Directory directory = await getExternalStorageDirectory();
//Get the directory path.
String path = directory.path;
//Create an empty file to write the PDF data.
File file = File('$path/secured.pdf');
//Write the PDF data.
await file.writeAsBytes(bytes, flush: true);
//Open the PDF document in mobile.
OpenFile.open('$path/secured.pdf');
```

By executing the program, you will get output like the following.

![Encrypt PDF file](https://www.syncfusion.com/blogs/wp-content/uploads/2021/02/Encrypt-PDF-file.jpg)

You can also set both the user and owner passwords by using the following code.

```dart
//Create document security.
PdfSecurity security = document.security;
//Set the owner password for the document.
security.ownerPassword = 'Owner@123';
//Set the user password for the document.
security.userPassword = 'password@123';
```

## Restrict PDF permissions

You can customize the permissions to allow or restrict certain actions on PDFs, such as:

- Copying content
- Printing
- Editing the document
- Filling form fields

The following table lists the permission flags supported by Syncfusion Flutter PDF Library.

![PDF permission flags](https://dev-to-uploads.s3.amazonaws.com/i/a3fdh9pvztttfarzqjq8.png)

**Note:** Only access to the included flags will be enabled and all other permissions will be disabled.

There are also permissions that are interrelated, so enabling one will affect another:

- Enabling copyContent will enable accessibilityCopyContent, as well.
- Enabling editContent will enable assembleDocument, as well.
- Enabling editAnnotation will enable fillFields, as well.
- fullQualityPrint will not work without enabling print.

To restrict PDF permissions, you must set the permission password (owner password) for the PDF document. You can set the owner password by using the **ownerPassword** property available in the **PdfSecurity** class.

You can set various permissions for the PDF document using the **Permissions** property available in the **PdfSecurity** class.

Include the following code to restrict the PDF document permissions.

```dart
//Load the existing PDF document.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('credit_card_statement.pdf'));
//Create document security.
PdfSecurity security = document.security;
//Set the owner password for the document.
security.ownerPassword = 'Owner@123';
//Set various permissions.
security.permissions.addAll(<PdfPermissionsFlags>[
  PdfPermissionsFlags.fullQualityPrint,
  PdfPermissionsFlags.print,
  PdfPermissionsFlags.fillFields,
  PdfPermissionsFlags.copyContent
]);
//Save and dispose the document.
List<int> bytes = document.save();
document.dispose();
//Open the PDF file.
_launchPdf(bytes);
```

By executing the program, you will get an output document like the following.  
 ![Customize PDF permissions](https://www.syncfusion.com/blogs/wp-content/uploads/2021/01/Customize-PDF-permissions-1.png)

## Decrypt or removing security from PDF

You can remove the security from the PDF document by using Syncfusion Flutter PDF Library, making it available for editing. It requires the password to decrypt the PDF document.

1. Removing the user password from a PDF document: You can remove the document open password by using the **userPassword** property available in the **PdfSecurity** class.
```dart
//Load the PDF document with user or permission password.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('secured.pdf'),
    password: 'owner@123');
//Get the document security.
PdfSecurity security = document.security;
//Set owner and user passwords to empty.
security.userPassword = '';
```
2. Removing the owner password from the PDF document: You can remove the permission password by using the **ownerPassword** property available in the **PdfSecurity** class. The following code illustrates this.
```dart
//Load the PDF document with permission password (since the user password cannot be used to alter the security permissions).
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('secured.pdf'),
    password: 'owner@123');
//Get the document security.
PdfSecurity security = document.security;
//Set owner and user passwords to empty.
security.ownerPassword = '';
```
3. Remove both the user and owner passwords from the PDF document:  
a. Load the PDF document using the owner (permission) password (since the user password cannot be used to alter the security permissions).  
b. Set the owner and user password properties to empty string.  
c. Clear the security permissions by using the **clear** method available in the **PdfPermissions** class.  
d. Save the document.
4. The following code example illustrates this.
```dart
//Load the PDF document with permission password.
PdfDocument document = PdfDocument(
    inputBytes: await _readDocumentData('secured.pdf'),
    password: 'owner@123');
//Get the document security.
PdfSecurity security = document.security;
//Set owner and user passwords to empty string.
security.userPassword = '';
security.ownerPassword = '';
//Clear the security permissions.
security.permissions.clear();
//Save and dispose the document.
List<int> bytes = document.save();
document.dispose();
//Open the PDF file.
_launchPdf(bytes, 'unsecured.pdf');
```

By executing this code, you will get an output document like the following screenshot.  
 ![Decrypt PDF document](https://www.syncfusion.com/blogs/wp-content/uploads/2021/01/Decrypt-PDF-document.png)

## Resource

You can check out the sample from the following GitHub repository on encrypting and decrypting PDF documents.

[https://github.com/SyncfusionExamples/encrypt\_and\_decrypt\_PDF\_in\_flutter](https://github.com/SyncfusionExamples/encrypt_and_decrypt_PDF_in_flutter)

##  Conclusion

In this blog post, we have learned the steps to encrypt and decrypt PDF documents using the Syncfusion [Flutter PDF Library](https://www.syncfusion.com/flutter-widgets/pdf-library) in a Flutter application.

Take a moment to peruse our [documentation](https://help.syncfusion.com/flutter/pdf/working-with-security), where you’ll find other options and features, all with accompanying code examples.

If you have any questions about these features, please let us know in the comments below. You can also contact us through our [support forum](https://www.syncfusion.com/forums), [Direct-Trac](https://www.syncfusion.com/support/directtrac/?_ga=2.203813140.507257297.1548648173-2146943073.1535695045), or [feedback portal](https://www.syncfusion.com/feedback/pdf). We are happy to assist you!

If you liked this article, we think you would also like the following articles about PDF Library:

- [Easily Create PDF Files Using Syncfusion PDF Library for Flutter](https://dev.to/syncfusion/easily-create-pdf-files-using-syncfusion-pdf-library-for-flutter-l41)
- [5 Ways to Extract Text from PDF Documents in Flutter](https://dev.to/syncfusion/5-ways-to-extract-text-from-pdf-documents-in-flutter-3k85)