69

What's the most popular way to encrypt individual files or folders?

3
  • Question is a bit unclear. Do you want to manually encrypt and decrypt files, or on the fly?
    – psusi
    Feb 23, 2011 at 19:15
  • 4
    Instead of 'most popular' , fitting a solution to your requirements might be helpful (as per psusi's question). Are you looking for a combination of easy, reliable, native, secure, fast, open source? All or some of these?
    – belacqua
    Feb 23, 2011 at 19:23
  • 7
    I'd like to add the remark that contrary to what some answers claim, TrueCrypt is not considered Free Software or Open Source by Debian/Ubuntu/Fedora/Red Hat/Arch Linux/OpenSuse/Gentoo/etc.
    – JanC
    Feb 23, 2011 at 22:02

7 Answers 7

48
+50

GnuPG (GPG) can use asymmetric and symmetric encryption. Asymmetric crypto involves a two keys, a public key for encryption and a private key for decryption. See djeikyb answer on this page for asymmetric key usage.

For symmetric encryption, the encryption and decryption keys are equal. It is important to realize that most people are very bad at choosing strong passwords. Thus, an encryption scheme using passwords should use a key-derivation function that takes more resources (time, memory) to slow down brute-force attacks.

For a description of GnuPG's KDF, see this Crypto Stack Exchange post. Example usage of symmetric encryption:

gpg --symmetric < unencrypted_file > encrypted_file

Decryption:

gpg --decrypt < encrypted_file > decrypted_file

Note that gpg caches the symkey by default (documented behavior). In order to avoid that, use --no-symkey-cache option as described in a related answer.

Manual page of gpg.


old answer for users who are able to chose good keys, see note below

For single files, openssl is very useful, especially when sending the file over an unsecured channel (e.g. e-mail). It's free (in money and in freedom), unlike Truecrypt, which is only free in money.

NOTE: the password that you enter here will be processed by one MD5 iteration 1. If you chose a password "123456", then you will have very little security.

Encrypt:

openssl aes-256-cbc -salt -in unencrypted_file -out encrypted_file

You'll be asked for a password, which you have to input twice.

Decrypt:

openssl aes-256-cbc -d -in encrypted_file -out unencrypted_file

Manual page for the enc program.

1 openssl enc uses the digest function defined by the -md option (default md5) and invokes function EVP_BytesToKey() with an iteration count of 1. This can be found in the openssl source at apps/enc.c.

12
  • Is there a way to do this without a passpharse? Mar 2, 2011 at 4:32
  • @Assaf Lavie: OpenSSL does not support keyfiles if you meant that, although it can read a password from the first line of a file. Read the manual page on openssl, section Pass phrase arguments.
    – Lekensteyn
    Mar 2, 2011 at 14:32
  • additionally you can use the "-a" flag which allows you to copy the crypted text, like so: "openssl aes-256-cbc -a -salt -in unencrypted_file -out encrypted_file "
    – v2r
    Feb 24, 2012 at 17:06
  • @v2r To add for further readers: -a base64-encodes the input (alias of -base64), to decrypt it you also need to add the -a option.
    – Lekensteyn
    Feb 24, 2012 at 17:14
  • 1
    @Lucio aes-256 is an alias for aes-256-cbc, there is no difference. CBC is a mode of operation for block ciphers. See the manual page of enc(1) for a list of supported ciphers.
    – Lekensteyn
    Dec 19, 2013 at 10:21
31

I use Seahorse for this. It's a Gnome front-end for GnuPG and integrates well with nautilus: Nautilus integration

To get nautilus integration, install the package seahorse-nautilus from the Software Center: seahorse-nautilus Install seahorse-nautilus

3
  • 3
    this only works if you have a GPGs keys created in your system ...
    – hhlp
    Feb 23, 2011 at 19:33
  • 3
    @hhlp: djeikyb's answer explains how to do that.
    – idbrii
    Mar 25, 2011 at 18:21
  • 1
    I'm wanting to encrypt my GPG key.
    – KI4JGT
    Jun 16, 2014 at 17:37
19

TrueCrypt: discontinued, unsecure source-available freeware Disk Encryption Software.

8
  • 2
    +1, encfs - with or without a GUI - is very useful and enough for most purposes.
    – loevborg
    Feb 23, 2011 at 18:58
  • 3
    Cryptkeeper is awesome - simple, powerful and a breeze to set up with Dropbox (askubuntu.com/questions/19613/…).
    – Scaine
    Feb 23, 2011 at 20:27
  • TrueCrypt is not packaged in Ubuntu (or any other major distributions) for licensing concerns.
    – MagicFab
    Oct 1, 2013 at 23:08
  • 2
    TrueCrypt is not that open-source. en.wikipedia.org/wiki/…
    – yuric
    Dec 20, 2013 at 1:42
  • 4
    'WARNING: Using TrueCrypt is not secure' - TrueCrypt
    – user457015
    May 30, 2014 at 11:15
17

A cli method would be GnuPG, and maybe tar. This is a short guide for reference, you really should read the documentation.

First run gpg --gen-key. Follow the prompts to generate your public/private key pair. Now you can encrypt files: gpg -e foo.txt. This will create a file called foo.txt.gpg. GnuPG does not delete the original unencrypted file, it's up to you whether you want it hanging around. To decrypt foo.txt.gpg, run gpg foo.txt.gpg. Decrypting will prompt you before overwriting existing files.

If you need to encrypt a directory, tar it first:

tar -cf foo.tar foo/
gpg -e foo.tar

You can rename the encrypted file whatever you want. When decrypted, the original file name is preserved.

2
  • 2
    The advantages of this method are: First it does not require installation of additional packages; Second it does not require root access. I would add compression to the tar command (xz or gz).
    – Panther
    Dec 20, 2013 at 2:20
  • Fwiw, a modern tool would be age. cf tptacek's "the problem with pgp". Haven't got time now for a proper amendment.
    – djeikyb
    Dec 19, 2023 at 8:22
12

There's also eCryptfs, which Ubuntu uses to encrypt Home Directories.

You can select home directory encryption at installation, or you can setup a single directory, $HOME/Private by default, using the ecryptfs-setup-private utility. This folder can be configured to automatically mount at login and unmount at logout. Every single file and folder within $HOME/Private, recursively, will be encrypted.

2
  • Unfortunately eCryptfs is VERY slow. Also there are few bugs in latest version
    – ruX
    Jan 30, 2013 at 13:10
  • On the contrary, if anything eCryptfs is faster than gpg; by default gpg attempts to compress before encrypting. And eCryptfs is now also used by most Android's
    – Xen2050
    Dec 28, 2014 at 13:13
2

You may also use "Academic Signature" to use elliptic curve cryptography with a wxWidgets GUI. It is open source but not in the repositories. It mainly does ECC asymmetric encryption, signatures and timestamps. But the tool also has a Menu entry for invoking Gnupg(RSA) and direct access to symmetric en-/decryption of files offering AES and other algorithms. Its homepage is here: https://www.academic-signature.org

I use it a lot for protecting files in transit and for digitally signing academic documents(transcripts, letters of recommendation, grade lists etc.)

1

I've taken some of the other suggestions and created a simple shell script wrapper (for the lazy)

https://github.com/orionM/ssl-crypt-tools

enjoy

1
  • 1
    hmm, bash script using openssl aes-256-cbc ... You know instead of using if [ $? -ne 0 ] ; then... fi you can just use ||? And there are some people who think OpenSSL "* has had several major security flaws in the last year [Heartbleed] while the Snowden documents show that GPG is one of the few programs that might stump the NSA when used properly. The OpenSSL code is also a complete cesspool and has terrible test coverage. (Disclosure: [he] work[s] on a "OpenSSL sucks; let's fix it" project.) – jbarlow*"
    – Xen2050
    Mar 16, 2016 at 11:18

You must log in to answer this question.