A file synchronization utility with client-side encryption support.


Features

  1. AES encryption support, including filename encryption
  2. Synchronization between storages in any direction
  3. Downloader
  4. Multithreading
  5. Auto-retries for failing requests

Supported storages

Synchronization, downloading, etc. can work in any direction from any one storage to another.
This list will expand in the future.

Support this project

If you found this program useful, consider donating:

Getting started

Installing on Windows

  1. Download the portable zip archive from here (64-bit) or here (32-bit)
  2. Unpack it anywhere you want
  3. The executables are in bin directory
  4. You can add the bin directory to PATH for convenience

Installing on Arch linux

Install from AUR using aurman:

aurman -S encrypt-and-sync

Installing on other systems

Installing from PyPI

Install from PyPI using pip:

pip install eas

Interactive configuration

To interactively edit the configuration, run

eas configure

Using the above command you can also change the master password and the encryption key.

It is recommended for you to take a look at Concepts, as well as --help:

eas --help

Manual configuration

The configuration file is located at ~/.eas/eas.conf.

You can generate a sample configuration by running

eas make-config ~/.eas/eas.conf

Concepts & usage

Folder

A folder refers to a directory in a certain storage. Folder path is specified like this: <storage-name>:///path/to/the/folder. If <storage-name> is empty, the path will be considered local.

Every folder must also have a name.
Folder names must only contain the following characters:

  • Letters, including unicode
  • Digits
  • _ (underscore), - (minus), + (plus) and . (dot).

Folders can be specified manually in the configuration file or interactively using the configure command.

Supported storages

Storage namePath example
Yandex.Diskyadisk:///example/path or disk:///example/path
Dropboxdropbox:///example/path
Locallocal:///example/path or /example/path
SFTPsftp:///example/path

Encryption

Encrypt & Sync uses AES encryption to encrypt file content and filenames.
The encryption key is stored in a separate file, encrypted with the master password.

Keep in mind
If you want to change the encryption key, you'll have to re-encrypt all your existing folders that use the current key. This doesn't apply to changing the master password.

Filename encryption

After the filenames are encrypted they are essentially just a bunch of random bytes, so they need to be encoded.

There are several different filename encodings for that but it's very likely that you'll never need to use anything other than base32. The only possible reason for that is if you have very long filenames (over 128 characters). In that case you can take a look at all the available encodings and pick the one that suits your needs.

Keep in mind
If you have an existing folder that uses some filename encoding and you want to use a different one, you'll have to re-encrypt the entire folder.

Supported filename encodings

ASCII encodings

Filename encodingCase-sensitiveStandardMaximum length*
base64 (default)160
base41144
base32128

* The table assumes that the maximum unencrypted filename length is 255 bytes, which varies across different systems and cloud services.

Synchronizer

The main component that does the actual synchronization of files. It divides the work into targets, which later get divided into tasks. Sync targets require the source and the destination folders to be specified.

In order to synchronize folders, you can run:

eas sync <source-folder> <destination-folder>

See eas sync --help for additional information.

Scanner

Before you can sync the folders they need to be scanned first. Scanner is the component responsible for this. It's goal is to obtain the list of files a folder has. Synchronizer does this automatically, unless it's specifically told not to do that.

In order to manually scan a folder, you can run:

eas scan <folder1> <folder2> ...

See eas scan --help for additional information.

Downloader

In case you want to download some files (or even whole folders), there's a downloader.

In order to download something, run:

eas download <source-path> <destination-path>

See eas download --help for additional information.

Duplicate remover

Sometimes, if the synchronizer dies in the middle of uploading a file, it can produce file duplicates next time, thinking that the file wasn't actually uploaded. It's very rare and it only happens to encrypted folders. Duplicates are not dangerous, they just waste space.

The existence of duplicates is a consequence of using randomly-generated IVs (initialization vectors) for AES encryption of filenames. Because of this, you can have two files (or directories) with different encrypted filenames, but when you decrypt them — you get the same filename.

Fortunately, it's not hard to identify and remove them (not that you normally have to). Duplicates are identified by the scanner and removed by the duplicate remover. This is normally done automatically as a separate stage of synchronization.

To manually remove duplicates, run:

eas remove-duplicates <path1> <path2> ...

See eas remove-duplicates --help for additional information.