=pod

=head1 NAME

enc - symmetric cipher routines

=head1 SYNOPSIS

B<openssl enc -ciphername>
[B<-in filename>]
[B<-out filename>]
[B<-pass arg>]
[B<-e>]
[B<-d>]
[B<-a>]
[B<-A>]
[B<-k password>]
[B<-kfile filename>]
[B<-K key>]
[B<-iv IV>]
[B<-p>]
[B<-P>]
[B<-bufsize number>]
[B<-debug>]

=head1 DESCRIPTION

The symmetric cipher commands allow data to be encrypted or decrypted
using various block and stream ciphers using keys based on passwords
or explicitly provided. Base64 encoding or decoding can also be performed
either by itself or in addition to the encryption or decryption.

=head1 OPTIONS

=over 4

=item B<-in filename>

the input filename, standard input by default.

=item B<-out filename>

the output filename, standard output by default.

=item B<-pass arg>

the password source. For more information about the format of B<arg>
see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.

=item B<-salt>

use a salt in the key derivation routines. This option should B<ALWAYS>
be used unless compatibility with previous versions of OpenSSL or SSLeay
is required. This option is only present on OpenSSL versions 0.9.5 or
above.

=item B<-nosalt>

don't use a salt in the key derivation routines. This is the default for
compatibility with previous versions of OpenSSL and SSLeay.

=item B<-e>

encrypt the input data: this is the default.

=item B<-d>

decrypt the input data.

=item B<-a>

base64 process the data. This means that if encryption is taking place
the data is base64 encoded after encryption. If decryption is set then
the input data is base64 decoded before being decrypted.

=item B<-A>

if the B<-a> option is set then base64 process the data on one line.

=item B<-k password>

the password to derive the key from. This is for compatibility with previous
versions of OpenSSL. Superseded by the B<-pass> argument.

=item B<-kfile filename>

read the password to derive the key from the first line of B<filename>.
This is for computability with previous versions of OpenSSL. Superseded by
the B<-pass> argument.

=item B<-S salt>

the actual salt to use: this must be represented as a string comprised only
of hex digits.

=item B<-K key>

the actual key to use: this must be represented as a string comprised only
of hex digits.

=item B<-iv IV>

the actual IV to use: this must be represented as a string comprised only
of hex digits.

=item B<-p>

print out the key and IV used.

=item B<-P>

print out the key and IV used then immediately exit: don't do any encryption
or decryption.

=item B<-bufsize number>

set the buffer size for I/O

=item B<-debug>

debug the BIOs used for I/O.

=back

=head1 NOTES

The program can be called either as B<openssl ciphername> or
B<openssl enc -ciphername>.

A password will be prompted for to derive the key and IV if necessary.

The B<-salt> option should B<ALWAYS> be used if the key is being derived
from a password unless you want compatibility with previous versions of
OpenSSL and SSLeay.

Without the B<-salt> option it is possible to perform efficient dictionary
attacks on the password and to attack stream cipher encrypted data. The reason
for this is that without the salt the same password always generates the same
encryption key. When the salt is being used the first eight bytes of the
encrypted data are reserved for the salt: it is generated at random when
encrypting a file and read from the encrypted file when it is decrypted.

Some of the ciphers do not have large keys and others have security
implications if not used correctly. A beginner is advised to just use
a strong block cipher in CBC mode such as bf or des3.

All the block ciphers use PKCS#5 padding also known as standard block
padding: this allows a rudimentary integrity or password check to be
performed. However since the chance of random data passing the test is
better than 1 in 256 it isn't a very good test.

All RC2 ciphers have the same key and effective key length.

Blowfish and RC5 algorithms use a 128 bit key.

=head1 SUPPORTED CIPHERS

 base64             Base 64

 bf-cbc             Blowfish in CBC mode
 bf                 Alias for bf-cbc
 bf-cfb             Blowfish in CFB mode
 bf-ecb             Blowfish in ECB mode
 bf-ofb             Blowfish in OFB mode

 cast-cbc           CAST in CBC mode
 cast               Alias for cast-cbc
 cast5-cbc          CAST5 in CBC mode
 cast5-cfb          CAST5 in CFB mode
 cast5-ecb          CAST5 in ECB mode
 cast5-ofb          CAST5 in OFB mode

 des-cbc            DES in CBC mode
 des                Alias for des-cbc
 des-cfb            DES in CBC mode
 des-ofb            DES in OFB mode
 des-ecb            DES in ECB mode

 des-ede-cbc        Two key triple DES EDE in CBC mode
 des-ede            Alias for des-ede
 des-ede-cfb        Two key triple DES EDE in CFB mode
 des-ede-ofb        Two key triple DES EDE in OFB mode

 des-ede3-cbc       Three key triple DES EDE in CBC mode
 des-ede3           Alias for des-ede3-cbc
 des3               Alias for des-ede3-cbc
 des-ede3-cfb       Three key triple DES EDE CFB mode
 des-ede3-ofb       Three key triple DES EDE in OFB mode

 desx               DESX algorithm.

 idea-cbc           IDEA algorithm in CBC mode
 idea               same as idea-cbc
 idea-cfb           IDEA in CFB mode
 idea-ecb           IDEA in ECB mode
 idea-ofb           IDEA in OFB mode

 rc2-cbc            128 bit RC2 in CBC mode
 rc2                Alias for rc2-cbc
 rc2-cfb            128 bit RC2 in CBC mode
 rc2-ecb            128 bit RC2 in CBC mode
 rc2-ofb            128 bit RC2 in CBC mode
 rc2-64-cbc         64 bit RC2 in CBC mode
 rc2-40-cbc         40 bit RC2 in CBC mode

 rc4                128 bit RC4
 rc4-64             64 bit RC4
 rc4-40             40 bit RC4

 rc5-cbc            RC5 cipher in CBC mode
 rc5                Alias for rc5-cbc
 rc5-cfb            RC5 cipher in CBC mode
 rc5-ecb            RC5 cipher in CBC mode
 rc5-ofb            RC5 cipher in CBC mode

=head1 EXAMPLES

Just base64 encode a binary file:

 openssl base64 -in file.bin -out file.b64

Decode the same file

 openssl base64 -d -in file.b64 -out file.bin 

Encrypt a file using triple DES in CBC mode using a prompted password:

 openssl des3 -salt -in file.txt -out file.des3 

Decrypt a file using a supplied password:

 openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword

Encrypt a file then base64 encode it (so it can be sent via mail for example)
using Blowfish in CBC mode:

 openssl bf -a -salt -in file.txt -out file.bf

Base64 decode a file then decrypt it:

 openssl bf -d -salt -a -in file.bf -out file.txt

Decrypt some data using a supplied 40 bit RC4 key:

 openssl rc4-40 -in file.rc4 -out file.txt -K 0102030405

=head1 BUGS

The B<-A> option when used with large files doesn't work properly.

There should be an option to allow an iteration count to be included.

Like the EVP library the B<enc> program only supports a fixed number of
algorithms with certain parameters. So if, for example, you want to use RC2
with a 76 bit key or RC4 with an 84 bit key you can't use this program.

=cut
