This method is good for encrypting short messages (while it uses variables for storing information and generates plain text output), but can be easily modified to encrypt larger files (using temporary files instead of variable).
(1) Encryption
First, define which ciphers and in which order you want to use. For more information about ciphers avaliable, type:
gpg --version
and jump to the section "ciphers" or "symmetric":
Symetryczne: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
Enter them in the config section of our "encrypt-multiple.sh" script:
#!/bin/bash
algos="TWOFISH AES256 CAMELLIA256 BLOWFISH CAST5" # list of ciphers to use
# -----------------------------------------------------#
# clearing variables
pass=""
pass2=""
# entering passwords
echo -n "Password: "
read -s pass
echo
echo -n "Re-enter password: "
read -s pass2
echo
# does passwords match?
if [ "$pass" == "$pass2" ]; then
echo "Passwords mach. Encrypting."
echo
input=`cat "$1"`
for algo in $algos
do
((i++))
echo "*** ($i) $algo"
input=`echo "$input" | gpg --no-tty --batch -a --symmetric --cipher-algo "$algo" --passphrase "$pass" -o-`
done
echo "$input" > "$1".asc.$i
echo "Encrypted message saved to $1.asc.$i"
# clearing passwords and inputs
input=""
pass=""
pass2=""
else
echo "Passwords doesn't match"
fi
So now if you want to encrypt message in file.txt, just run:
encrypt-multiple.sh file.txt
After entering passphases (twice) you will get the encrypted file "file.txt.n" where n is a number of used ciphers (n will be necesary while during decryption).
(2) Decryption
For decrypting above message we just need to enter valid password. We don't need the names and order of used ciphers as gpg detects it automagically. The n - number of passes (used ciphers) is "encoded" in file extension.
#!/bin/bash
pass=""
# entering passwords
echo -n "Password: "
read -s pass
echo
input=`cat "$1"`
# list of Ciphers are not necesary as gpg detects it; read from file extension
algos="${1##*.}"
echo "Encrypted $algos times. Decrypting..."
for i in `seq 1 $algos`
do
echo "*** $i"
input=`echo "$input" | gpg --no-tty --batch -d --passphrase "$pass" -o-`
done
echo "Decrypted message:"
echo "---------------------------------------"
echo "$input"
# clearing passwords and inputs
input=""
pass=""
pass2=""
(3) Output file sizes.
Output file sizes inceases as more ciphers are used. Here is an example of file sizes (uncompressed and compressed with bzip2). Cipher used are:
TWOFISH AES256 CAMELLIA256 BLOWFISH CAST5 TWOFISH AES256 CAMELLIA256 BLOWFISH CAST5.
More reading about ciphers and symmetric encryption:
GPG Encryption Guide - Part 4 (Symmetric Encryption).
(4) Bonus
If you want to try decoding, here is
5-fold encrypted text (n=5). The password is
chemoinformatics.