No description
  • Java 99.4%
  • Shell 0.6%
Find a file
2026-05-07 18:11:37 +02:00
app Fix: Adapt to new Gradle version 2026-03-18 12:25:48 +01:00
documentation Upgrade to Java 25 2026-03-18 12:10:30 +01:00
gradle Upgrade to Java 25 2026-03-18 12:10:30 +01:00
LICENSES Use Noto fonts as fallback 2025-12-12 16:10:11 +01:00
packaging Arch: Make hicolor mandatory 2026-05-07 18:11:37 +02:00
.gitattributes Make code and code-like files REUSE compliant 2025-09-10 16:35:30 +02:00
.gitignore Make code and code-like files REUSE compliant 2025-09-10 16:35:30 +02:00
CONTRIBUTING.md Make documentation files REUSE compliant 2025-09-10 16:57:43 +02:00
gradlew Upgrade to Java 25 2026-03-18 12:10:30 +01:00
gradlew.bat Upgrade to Java 25 2026-03-18 12:10:30 +01:00
LICENSE.md Initial commit 2024-10-29 16:38:52 +01:00
licenseheader.txt REUSE compliant 2025-09-11 19:02:46 +02:00
LICENSES.md REUSE compliant 2025-09-11 19:02:46 +02:00
README.md Bump version to v0.9.11.0 2026-03-18 11:11:13 +01:00
REUSE.toml Use Noto fonts as fallback 2025-12-12 16:10:11 +01:00
settings.gradle Make code and code-like files REUSE compliant 2025-09-10 16:35:30 +02:00

Table of Contents

OpaqueFiles

A free and open-source file encryption software for Linux, Windows and Mac that encrypts/decrypts files so they can be stored securely, utilizing compression (Zstd/gzip/LZMA2), Reed–Solomon Error Correction, encryption(ChaCha20/AES-GCM-SIV) and keys derived from the user's password with Argon2id.

example

Before you install

OpaqueFiles can be used to encrypt files before uploading them to a cloud provider for synchronization across multiple devices. This protects the contents in those files from the cloud provider and from hackers that might gain acess to your cloud account.
Before considering OpaqueFiles, you should check out Cryptomator, as it is more suitable to most users.
A comparison with other encryption software can be found in the Why OpaqueFiles? section of the wiki.

In cases where the encrypted files should be navigated and downloaded individually using a web GUI, OpaqueFiles is the most user friendly option (to my knowledge).

I wrote OpaqueFiles in my free time, and while it is neither perfect nor bug-free, it is good enough that i entrust my personal data to it.

flathub

Vulnerabilities

There is always the chance that my implementation is leaking or has a vulnerability.

Do not use OpaqueFiles to encrypt personal files and then store them in a completely untrusted location. This is an additional layer of security, not THE layer of security.

Known Vulnerabilities

Known vulnerabilities will be listed here. If you feel like you want to search for vulnerabilities, best start at the specification.

Bug Reports Welcome!

As OpaqueFiles has just been released, bugs are to be expected. If you encounter a bug, please open an issue.

Quick start

This quick start guide will instruct you step by step how to use OpaqueFiles on your computer.

0. Preparation

0.1 Password Management

Please follow the following instructions without skipping any step. If you lose your password(s), all your file's contents will be lost.

0.1.1 Generate a password

Use an open-source password manager like KeePassXC to generate a safe password with more than 6 characters. The password can use any Unicode characters. The longer the better. I recommend 30 characters.

0.1.2 Secure the password

Secure the password by writing it down and storing the paper in a safe, or better put it into your password manager and secure your password manger file in a fireproof and waterproof location.

If you lose your password, you lose your files.

This way you will not loose your password even if you forget it. Use a password manager to acess the password each time you need it.

1 Installation

1.1 Windows and Mac

1.1.0 Java

You need to install Java to run OpaqueFiles. You can find a step-by-step guide to installing Java in the wiki.

1.1.1 Download and Extraction

Download the newest version of OpaqueFiles from the RELEASES folder.

1.2 Linux

1.2.0 ALL DISTRIBUTIONS (Flatpak)
1.2.0.0 Preparation

The OpaqueFiles flatpak requires flatpak to be installed: Install flatpak

1.2.0.1 Installation
user $ flatpak install flathub page.codeberg.cozyowl.OpaqueFiles
1.2.0.2 Updating
user $ flatpak update
1.2.0.3 Removal
user $ flatpak remove page.codeberg.cozyowl.OpaqueFiles
user $ rm -r ~/.config/OpaqueFiles
1.2.1 Debian
1.2.1.1 Installation
user $ git clone https://codeberg.org/cozyOwl/OpaqueFiles.git
user $ cd OpaqueFiles/packaging/debian
user $ git checkout tags/v0.9.11.0
user $ ./packageDebian.sh 0.9.11.0
ROOT # apt install ./opaquefiles_0.9.11.0-1_amd64.deb
1.2.1.2 Updating
user $ cd OpaqueFiles/packaging/debian
user $ git fetch
user $ git checkout tags/v0.9.11.0
user $ ./packageDebian.sh 0.9.11.0
ROOT # apt install ./opaquefiles_0.9.11.0-1_amd64.deb
1.2.1.3 Removal
ROOT # apt remove opaquefiles
user $ rm -r ~/.config/OpaqueFiles
1.2.2 ArchLinux
1.2.2.1 Installation
user $ yay -S opquefiles
1.2.2.2 Updating
user $ yay -Syu
1.2.2.3 Removal
user $ yay -R opaquefiles
user $ rm -r ~/.config/OpaqueFiles
1.2.3 Gentoo
1.2.3.1 Installation
ROOT # eselect repository create cozyowl
ROOT # mkdir --parents /var/db/repos/cozyowl/app-crypt/opaquefiles
ROOT # cd /var/db/repos/cozyowl/app-crypt/opaquefiles
ROOT # wget https://codeberg.org/cozyOwl/OpaqueFiles/raw/branch/main/packaging/gentoo/opaquefiles-0.9.11.0-r0.ebuild
ROOT # emerge -av app-crypt/opaquefiles::cozyowl
1.2.3.2 Updating
ROOT # cd /var/db/repos/cozyowl/app-crypt/opaquefiles
ROOT # wget -N https://codeberg.org/cozyOwl/OpaqueFiles/raw/branch/main/packaging/gentoo/opaquefiles-0.9.11.0-r0.ebuild
ROOT # emerge -av app-crypt/opaquefiles::cozyowl
1.2.3.3 Removal
ROOT # emerge --deselect app-crypt/opaquefiles::cozyowl
user $ rm -r ~/.config/OpaqueFiles

1.4 Troubleshooting

You encountered an error while installing, updating or uninstalling? These instructions need to be changed? Please report this bug, so others may not encounter it.

2 First run

You are about to start OpaqueFiles for the first time. But before that, you need to set up a test environment so that you don't encrypt all of your files accidentially while testing around.

2.1 Preparation

Your desktop is the location where you usually copy your files around. For most people that should be the desktop, but if you have a different folder, replace desktop with whatever folder you are most comfortable with.

2.1.1 Create test files

On your desktop, create a folder called testing. Inside testing, create 3 text files named test1.txt, test2.txt and test3.txt.

2.2 Start OpaqueFiles

2.2.1 Windows/Mac

Now copy the OpaqueFiles.jar from the downloaded archive into testing.

Double click OpaqueFiles.jar. Click the folder icon next to scope and select test1.txt.

2.2.2 Linux

Right click the test1.txt file and select Open with > OpaqueFiles.

2.3 Enter password

Enter the password into the password field, by copying it from your password manager.

Entering password

Please make sure the scope is set to test1.txt.

2.4 Encrypt

Click and hold the ENCRYPT button on the bottom to start the encryption process.

2.4.1 Results

As you can see, test1.txt was encrypted, while test2.txt and test3.txt remain unchanged.

2.5 Encrypt more

2.5.1 Windows/Mac

Run OpaqueFiles again, and in the scope selector, select test2.txt and test3.txt simultaneously. Encrypt.

2.5.2 Linux

Select test2.txt and test3.txt simultaneously in your file browser, then select Open with > OpaqueFiles. Encrypt.

2.5.3 Results

As you can see, you can encrypt multiple files simultaneously.

Now, take some larger files and COPY (not move) them into testing. Encrypt them too.

2.6 Decrypt

2.6.1 Windows/Mac

Start OpaqueFiles.jar, enter your password and hold the DECRYPT button. As you can see, if you do not select a scope yourself, OpaqueFiles uses the current directory as scope.

2.6.2 Linux

Select the testing folder in your file browser, then select Open with > OpaqueFiles. Enter your password and hold the DECRYPT button.

2.6.3 Result

As you can see, you can select folders as scopes, and encrypt or decrypt all files within simultaneously. And yes, you can select files and folders at the same time.

3 Use OpaqueFiles

Congratulations! You are now ready to use OpaqueFiles anywhere on your disk. Please do not use more than one password, because you will get confused which files were encrypted with which password. Also remember that you can come back and read the troubleshooting part of the wiki if you have any problems. If you want to use OpaqueFiles now, do it.

To make the process of encryption/decryption easier and faster, read the advanced features part of the wiki.

Main features

Overview

┌─────────────[HEADER]─────────────┐           >Helps distinguish OpaqueFiles from other files
│            IDENTIFIER            │             and distinguishes different versions from each other.
│             Version              │
└──────────────────────────────────┘
┌─────────────[ECC]────────────────┐           >Error Correction Code (ReedSolomon) protects from bit rot.
│                                  │
│ ┌────────[METADATA]──────────┐   │           >Stores important information for decryption.
│ │                            │   │
│ │ ┌──────[ENCRYPTION]──────┐ │   │           >Protects against spying eyes.
│ │ │                        │ │   │             AES256 or ChaCha20 (faster, default).
│ │ │ ┌────[COMPRESSION]───┐ │ │   │           >Keeps the file size in check,
│ │ │ │                    │ │ │   │             so uploading and storing is fast and cheap.
│ │ │ │ ┌────[HASHING]───┐ │ │ │   │           >Protects against data corruption during encryption,
│ │ │ │ │ ORIGINAL FILE  │ │ │ │   │              and makes sure that the decrypted file is unaltered.
│ │ │ │ └────────────────┘ │ │ │   │              SHA1 or SHA256 or SHA512 (default) or SHA3-512
│ │ │ │                    │ │ │   │
│ │ │ └────────────────────┘ │ │   │
│ │ │                        │ │   │
│ │ └────────────────────────┘ │   │
│ │                            │   │
│ └────────────────────────────┘   │
│                                  │
└──────────────────────────────────┘

1 🔒 Encryption (Default: ChaCha20)

OpaqueFiles supports two encryption algorithms. These are used to keep your data safe.

1.1 ChaCha20

ChaCha20 is more modern and faster than AES, but less well tested, and can therefore be seen as less secure.

1.2 AES256

AES-GCM-SIV can be enabled in the configuration file. AES256 is old and reliable, and the recommended option if you want the highest level of security.

2 🗜 Compression (Default: Zstd)

As OpaqueFiles is meant for archiving data without acessing the data frequently, keeping the file size small is more important than processing speed. OpaqueFiles supports multiple modern compression algorithms, including no compression. No compression should be used when compressing data that was already compressed efficiently like images, videos and audio.

2.1 None

Compression can be disabled to improve processing speed on already compressed data like videos, pictures and audio. Speed: 100%.

2.2 Zstd

Zstd is a very fast, modern compression algorithm. Compression: Decent. Speed: 80-110%.

2.3 gzip

Gzip, an old and reliable compression algorithm. Compression: Good. Speed: ~30%.

2.4 XZ (LZMA2)

LZMA2 offers the highest compression ratio. Compression: Great. Speed: ~4%.

3 🩹 Error correction (Default: 10%)

Reed–Solomon Error Correction (Error Correction Code, ECC) is used by OpaqueFiles to recover from bit rot. This helps if you plan to store the encrypted files on an external HDD or SSD, and you forget regular data scrubbing.

4 🪨 Argon2id key derivation

Argon2id is used to ensure even weak passwords generate somewhat strong keys. This helps to keep the data secure.

5 Verification (Default: on)

As long as verification is not disabled, each file that is encrypted is immediately decrypted afterwards to see if the encrypted file can be decrypted and contains the same data as the unencrypted file. This protects against data corruption, bugs during encryption and malicious manipulation. The same thing happens during decryption.

6 🧽 Scrubbing

OpaqueFiles can be instructed to scrub encrypted files for bit rot and resolve these errors automatically. This is called data scrubbing, and it does not even use a password. Scrubbing can not detect malicious manipulation.

7 🚰 Unix Pipelines

OpaqueFiles can be instructed to use Unix Pipelines for input and output.

8 🌡 Stress testing

OpaqueFiles can be used to test CPU/RAM stability. For me, it is faster in detecting errors than Prime95.

Who is OpaqueFiles for?

OpaqueFiles is for all users who want to store or archive files in the cloud while protecting the content of their files from the eyes of a cloud provider, hackers or other attackers that might have access to the files in the cloud. OpaqueFiles sacrifices some privacy for convenience by storing the names of files, their size and their modification date unencrypted.

OpaqueFiles is not for those users who want to change these files regularly. See Why OpaqueFiles? for more info.

Support the Project

If my program helped you in some way and you want to say 'Thank you!' for this program in a monetary way, click here.