Home | History | Annotate | Line # | Download | only in man1
      1 =pod
      2 {- OpenSSL::safe::output_do_not_edit_headers(); -}
      3 
      4 =head1 NAME
      5 
      6 openssl-enc - symmetric cipher routines
      7 
      8 =head1 SYNOPSIS
      9 
     10 B<openssl> B<enc>|I<cipher>
     11 [B<-I<cipher>>]
     12 [B<-help>]
     13 [B<-list>]
     14 [B<-ciphers>]
     15 [B<-in> I<filename>]
     16 [B<-out> I<filename>]
     17 [B<-pass> I<arg>]
     18 [B<-e>]
     19 [B<-d>]
     20 [B<-a>]
     21 [B<-base64>]
     22 [B<-A>]
     23 [B<-k> I<password>]
     24 [B<-kfile> I<filename>]
     25 [B<-K> I<key>]
     26 [B<-iv> I<IV>]
     27 [B<-S> I<salt>]
     28 [B<-salt>]
     29 [B<-nosalt>]
     30 [B<-z>]
     31 [B<-md> I<digest>]
     32 [B<-iter> I<count>]
     33 [B<-pbkdf2>]
     34 [B<-saltlen> I<size>]
     35 [B<-p>]
     36 [B<-P>]
     37 [B<-bufsize> I<number>]
     38 [B<-nopad>]
     39 [B<-v>]
     40 [B<-debug>]
     41 [B<-none>]
     42 [B<-skeymgmt> I<skeymgmt>]
     43 [B<-skeyopt> I<opt>:I<value>]
     44 {- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_r_synopsis -}
     45 {- $OpenSSL::safe::opt_provider_synopsis -}
     46 
     47 B<openssl> I<cipher> [B<...>]
     48 
     49 =head1 DESCRIPTION
     50 
     51 The symmetric cipher commands allow data to be encrypted or decrypted
     52 using various block and stream ciphers using keys based on passwords
     53 or explicitly provided. Base64 encoding or decoding can also be performed
     54 either by itself or in addition to the encryption or decryption.
     55 
     56 =head1 OPTIONS
     57 
     58 =over 4
     59 
     60 =item B<-I<cipher>>
     61 
     62 The cipher to use.
     63 
     64 =item B<-help>
     65 
     66 Print out a usage message.
     67 
     68 =item B<-list>
     69 
     70 List all supported ciphers.
     71 
     72 =item B<-ciphers>
     73 
     74 Alias of -list to display all supported ciphers.
     75 
     76 =item B<-in> I<filename>
     77 
     78 The input filename, standard input by default.
     79 
     80 =item B<-out> I<filename>
     81 
     82 The output filename, standard output by default.
     83 
     84 =item B<-pass> I<arg>
     85 
     86 The password source. For more information about the format of I<arg>
     87 see L<openssl-passphrase-options(1)>.
     88 
     89 =item B<-e>
     90 
     91 Encrypt the input data: this is the default.
     92 
     93 =item B<-d>
     94 
     95 Decrypt the input data.
     96 
     97 =item B<-a>
     98 
     99 Base64 process the data. This means that if encryption is taking place
    100 the data is base64 encoded after encryption. If decryption is set then
    101 the input data is base64 decoded before being decrypted.
    102 
    103 When the B<-A> option not given,
    104 on encoding a newline is inserted after each 64 characters, and
    105 on decoding a newline is expected among the first 1024 bytes of input.
    106 
    107 =item B<-base64>
    108 
    109 Same as B<-a>
    110 
    111 =item B<-A>
    112 
    113 If the B<-a> option is set then base64 encoding produces output without any
    114 newline character, and base64 decoding does not require any newlines.
    115 Therefore it can be helpful to use the B<-A> option when decoding unknown input.
    116 
    117 =item B<-k> I<password>
    118 
    119 The password to derive the key from. This is for compatibility with previous
    120 versions of OpenSSL. Superseded by the B<-pass> argument.
    121 
    122 =item B<-kfile> I<filename>
    123 
    124 Read the password to derive the key from the first line of I<filename>.
    125 This is for compatibility with previous versions of OpenSSL. Superseded by
    126 the B<-pass> argument.
    127 
    128 =item B<-md> I<digest>
    129 
    130 Use the specified digest to create the key from the passphrase.
    131 The default algorithm is sha-256.
    132 
    133 =item B<-iter> I<count>
    134 
    135 Use a given number of iterations on the password in deriving the encryption key.
    136 High values increase the time required to brute-force the resulting file.
    137 This option enables the use of PBKDF2 algorithm to derive the key.
    138 
    139 =item B<-pbkdf2>
    140 
    141 Use PBKDF2 algorithm with a default iteration count of 10000
    142 unless otherwise specified by the B<-iter> command line option.
    143 
    144 =item B<-saltlen>
    145 
    146 Set the salt length to use when using the B<-pbkdf2> option.
    147 For compatibility reasons, the default is 8 bytes.
    148 The maximum value is currently 16 bytes.
    149 If the B<-pbkdf2> option is not used, then this option is ignored
    150 and a fixed salt length of 8 is used. The salt length used when
    151 encrypting must also be used when decrypting.
    152 
    153 =item B<-nosalt>
    154 
    155 Don't use a salt in the key derivation routines. This option B<SHOULD NOT> be
    156 used except for test purposes or compatibility with ancient versions of
    157 OpenSSL.
    158 
    159 =item B<-salt>
    160 
    161 Use salt (randomly generated or provide with B<-S> option) when
    162 encrypting, this is the default.
    163 
    164 =item B<-S> I<salt>
    165 
    166 The actual salt to use: this must be represented as a string of hex digits.
    167 If this option is used while encrypting, the same exact value will be needed
    168 again during decryption. This salt may be truncated or zero padded to
    169 match the salt length (See B<-saltlen>).
    170 
    171 =item B<-K> I<key>
    172 
    173 The actual key to use: this must be represented as a string comprised only
    174 of hex digits. If only the key is specified, the IV must additionally specified
    175 using the B<-iv> option. When both a key and a password are specified, the
    176 key given with the B<-K> option will be used and the IV generated from the
    177 password will be taken. It does not make much sense to specify both key
    178 and password.
    179 
    180 =item B<-iv> I<IV>
    181 
    182 The actual IV to use: this must be represented as a string comprised only
    183 of hex digits. When only the key is specified using the B<-K> option, the
    184 IV must explicitly be defined. When a password is being specified using
    185 one of the other options, the IV is generated from this password.
    186 
    187 =item B<-p>
    188 
    189 Print out the key and IV used.
    190 
    191 =item B<-P>
    192 
    193 Print out the key and IV used then immediately exit: don't do any encryption
    194 or decryption.
    195 
    196 =item B<-bufsize> I<number>[B<k>]
    197 
    198 Set the buffer size for I/O.
    199 The maximum size that can be specified is B<2^31-1> (2147483647) bytes.
    200 The B<k> suffix can be specified to indicate that I<number> is provided
    201 in kibibytes (multiples of 1024 bytes).
    202 
    203 =item B<-nopad>
    204 
    205 Disable standard block padding.
    206 
    207 =item B<-v>
    208 
    209 Verbose print; display some statistics about I/O and buffer sizes.
    210 
    211 =item B<-debug>
    212 
    213 Debug the BIOs used for I/O.
    214 
    215 =item B<-z>
    216 
    217 Compress or decompress encrypted data using zlib after encryption or before
    218 decryption. This option exists only if OpenSSL was compiled with the zlib
    219 or zlib-dynamic option.
    220 
    221 =item B<-none>
    222 
    223 Use NULL cipher (no encryption or decryption of input).
    224 
    225 =item B<-skeymgmt> I<skeymgmt>
    226 
    227 Some providers may support opaque symmetric keys objects. To use them, we need
    228 to know the name of the B<EVP_SKEYMGMT> to be used. If not specified, the name
    229 of the cipher will be used.
    230 
    231 To find out the name of the suitable symmetric key management,
    232 please refer to the output of the C<openssl list -skey-managers> command.
    233 
    234 =item B<-skeyopt> I<opt>:I<value>
    235 
    236 To obtain an existing opaque symmetric key or generate a new one, key
    237 options are specified as opt:value. These options can't be used together with
    238 any options implying raw key directly or indirectly.
    239 
    240 {- $OpenSSL::safe::opt_r_item -}
    241 
    242 {- $OpenSSL::safe::opt_provider_item -}
    243 
    244 {- $OpenSSL::safe::opt_engine_item -}
    245 
    246 =back
    247 
    248 =head1 NOTES
    249 
    250 The program can be called either as C<openssl I<cipher>> or
    251 C<openssl enc -I<cipher>>. The first form doesn't work with
    252 engine-provided ciphers, because this form is processed before the
    253 configuration file is read and any ENGINEs loaded.
    254 Use the L<openssl-list(1)> command to get a list of supported ciphers.
    255 
    256 Engines which provide entirely new encryption algorithms (such as the ccgost
    257 engine which provides gost89 algorithm) should be configured in the
    258 configuration file. Engines specified on the command line using B<-engine>
    259 option can only be used for hardware-assisted implementations of
    260 ciphers which are supported by the OpenSSL core or another engine specified
    261 in the configuration file.
    262 
    263 When the enc command lists supported ciphers, ciphers provided by engines,
    264 specified in the configuration files are listed too.
    265 
    266 A password will be prompted for to derive the key and IV if necessary.
    267 
    268 The B<-salt> option should B<ALWAYS> be used if the key is being derived
    269 from a password unless you want compatibility with previous versions of
    270 OpenSSL.
    271 
    272 Without the B<-salt> option it is possible to perform efficient dictionary
    273 attacks on the password and to attack stream cipher encrypted data. The reason
    274 for this is that without the salt the same password always generates the same
    275 encryption key.
    276 
    277 When the salt is generated at random (that means when encrypting using a
    278 passphrase without explicit salt given using B<-S> option), the first bytes
    279 of the encrypted data are reserved to store the salt for later decrypting.
    280 
    281 Some of the ciphers do not have large keys and others have security
    282 implications if not used correctly. A beginner is advised to just use
    283 a strong block cipher, such as AES, in CBC mode.
    284 
    285 All the block ciphers normally use PKCS#7 padding, also known as standard
    286 block padding. This allows a rudimentary integrity or password check to
    287 be performed. However, since the chance of random data passing the test
    288 is better than 1 in 256 it isn't a very good test.
    289 
    290 If padding is disabled then the input data must be a multiple of the cipher
    291 block length.
    292 
    293 All RC2 ciphers have the same key and effective key length.
    294 
    295 Blowfish and RC5 algorithms use a 128 bit key.
    296 
    297 Please note that OpenSSL 3.0 changed the effect of the B<-S> option.
    298 Any explicit salt value specified via this option is no longer prepended to the
    299 ciphertext when encrypting, and must again be explicitly provided when decrypting.
    300 Conversely, when the B<-S> option is used during decryption, the ciphertext
    301 is expected to not have a prepended salt value.
    302 
    303 When using OpenSSL 3.0 or later to decrypt data that was encrypted with an
    304 explicit salt under OpenSSL 1.1.1 do not use the B<-S> option, the salt will
    305 then be read from the ciphertext.
    306 To generate ciphertext that can be decrypted with OpenSSL 1.1.1 do not use
    307 the B<-S> option, the salt will be then be generated randomly and prepended
    308 to the output.
    309 
    310 =head1 SUPPORTED CIPHERS
    311 
    312 Note that some of these ciphers can be disabled at compile time
    313 and some are available only if an appropriate engine is configured
    314 in the configuration file. The output when invoking this command
    315 with the B<-list> option (that is C<openssl enc -list>) is
    316 a list of ciphers, supported by your version of OpenSSL, including
    317 ones provided by configured engines.
    318 
    319 This command does not support authenticated encryption modes
    320 like CCM and GCM, and will not support such modes in the future.
    321 This is due to having to begin streaming output (e.g., to standard output
    322 when B<-out> is not used) before the authentication tag could be validated.
    323 When this command is used in a pipeline, the receiving end will not be
    324 able to roll back upon authentication failure.  The AEAD modes currently in
    325 common use also suffer from catastrophic failure of confidentiality and/or
    326 integrity upon reuse of key/iv/nonce, and since B<openssl enc> places the
    327 entire burden of key/iv/nonce management upon the user, the risk of
    328 exposing AEAD modes is too great to allow. These key/iv/nonce
    329 management issues also affect other modes currently exposed in this command,
    330 but the failure modes are less extreme in these cases, and the
    331 functionality cannot be removed with a stable release branch.
    332 For bulk encryption of data, whether using authenticated encryption
    333 modes or other modes, L<openssl-cms(1)> is recommended, as it provides a
    334 standard data format and performs the needed key/iv/nonce management.
    335 
    336 When enc is used with key wrapping modes the input data cannot be streamed,
    337 meaning it must be processed in a single pass.
    338 Consequently, the input data size must be less than
    339 the buffer size (-bufsize arg, default to 8*1024 bytes).
    340 The '*-wrap' ciphers require the input to be a multiple of 8 bytes long,
    341 because no padding is involved.
    342 The '*-wrap-pad' ciphers allow any input length.
    343 In both cases, no IV is needed. See example below.
    344 
    345 
    346  base64             Base 64
    347 
    348  bf-cbc             Blowfish in CBC mode
    349  bf                 Alias for bf-cbc
    350  blowfish           Alias for bf-cbc
    351  bf-cfb             Blowfish in CFB mode
    352  bf-ecb             Blowfish in ECB mode
    353  bf-ofb             Blowfish in OFB mode
    354 
    355  cast-cbc           CAST in CBC mode
    356  cast               Alias for cast-cbc
    357  cast5-cbc          CAST5 in CBC mode
    358  cast5-cfb          CAST5 in CFB mode
    359  cast5-ecb          CAST5 in ECB mode
    360  cast5-ofb          CAST5 in OFB mode
    361 
    362  chacha20           ChaCha20 algorithm
    363 
    364  des-cbc            DES in CBC mode
    365  des                Alias for des-cbc
    366  des-cfb            DES in CFB mode
    367  des-ofb            DES in OFB mode
    368  des-ecb            DES in ECB mode
    369 
    370  des-ede-cbc        Two key triple DES EDE in CBC mode
    371  des-ede            Two key triple DES EDE in ECB mode
    372  des-ede-cfb        Two key triple DES EDE in CFB mode
    373  des-ede-ofb        Two key triple DES EDE in OFB mode
    374 
    375  des-ede3-cbc       Three key triple DES EDE in CBC mode
    376  des-ede3           Three key triple DES EDE in ECB mode
    377  des3               Alias for des-ede3-cbc
    378  des-ede3-cfb       Three key triple DES EDE CFB mode
    379  des-ede3-ofb       Three key triple DES EDE in OFB mode
    380 
    381  desx               DESX algorithm.
    382 
    383  gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)
    384  gost89-cnt         GOST 28147-89 in CNT mode (provided by ccgost engine)
    385 
    386  idea-cbc           IDEA algorithm in CBC mode
    387  idea               same as idea-cbc
    388  idea-cfb           IDEA in CFB mode
    389  idea-ecb           IDEA in ECB mode
    390  idea-ofb           IDEA in OFB mode
    391 
    392  rc2-cbc            128 bit RC2 in CBC mode
    393  rc2                Alias for rc2-cbc
    394  rc2-cfb            128 bit RC2 in CFB mode
    395  rc2-ecb            128 bit RC2 in ECB mode
    396  rc2-ofb            128 bit RC2 in OFB mode
    397  rc2-64-cbc         64 bit RC2 in CBC mode
    398  rc2-40-cbc         40 bit RC2 in CBC mode
    399 
    400  rc4                128 bit RC4
    401  rc4-64             64 bit RC4
    402  rc4-40             40 bit RC4
    403 
    404  rc5-cbc            RC5 cipher in CBC mode
    405  rc5                Alias for rc5-cbc
    406  rc5-cfb            RC5 cipher in CFB mode
    407  rc5-ecb            RC5 cipher in ECB mode
    408  rc5-ofb            RC5 cipher in OFB mode
    409 
    410  seed-cbc           SEED cipher in CBC mode
    411  seed               Alias for seed-cbc
    412  seed-cfb           SEED cipher in CFB mode
    413  seed-ecb           SEED cipher in ECB mode
    414  seed-ofb           SEED cipher in OFB mode
    415 
    416  sm4-cbc            SM4 cipher in CBC mode
    417  sm4                Alias for sm4-cbc
    418  sm4-cfb            SM4 cipher in CFB mode
    419  sm4-ctr            SM4 cipher in CTR mode
    420  sm4-ecb            SM4 cipher in ECB mode
    421  sm4-ofb            SM4 cipher in OFB mode
    422 
    423  aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode
    424  aes[128|192|256]       Alias for aes-[128|192|256]-cbc
    425  aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode
    426  aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode
    427  aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode
    428  aes-[128|192|256]-ctr  128/192/256 bit AES in CTR mode
    429  aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode
    430  aes-[128|192|256]-ofb  128/192/256 bit AES in OFB mode
    431 
    432  aes-[128|192|256]-wrap     key wrapping using 128/192/256 bit AES
    433  aes-[128|192|256]-wrap-pad key wrapping with padding using 128/192/256 bit AES
    434 
    435  aria-[128|192|256]-cbc  128/192/256 bit ARIA in CBC mode
    436  aria[128|192|256]       Alias for aria-[128|192|256]-cbc
    437  aria-[128|192|256]-cfb  128/192/256 bit ARIA in 128 bit CFB mode
    438  aria-[128|192|256]-cfb1 128/192/256 bit ARIA in 1 bit CFB mode
    439  aria-[128|192|256]-cfb8 128/192/256 bit ARIA in 8 bit CFB mode
    440  aria-[128|192|256]-ctr  128/192/256 bit ARIA in CTR mode
    441  aria-[128|192|256]-ecb  128/192/256 bit ARIA in ECB mode
    442  aria-[128|192|256]-ofb  128/192/256 bit ARIA in OFB mode
    443 
    444  camellia-[128|192|256]-cbc  128/192/256 bit Camellia in CBC mode
    445  camellia[128|192|256]       Alias for camellia-[128|192|256]-cbc
    446  camellia-[128|192|256]-cfb  128/192/256 bit Camellia in 128 bit CFB mode
    447  camellia-[128|192|256]-cfb1 128/192/256 bit Camellia in 1 bit CFB mode
    448  camellia-[128|192|256]-cfb8 128/192/256 bit Camellia in 8 bit CFB mode
    449  camellia-[128|192|256]-ctr  128/192/256 bit Camellia in CTR mode
    450  camellia-[128|192|256]-ecb  128/192/256 bit Camellia in ECB mode
    451  camellia-[128|192|256]-ofb  128/192/256 bit Camellia in OFB mode
    452 
    453 =head1 EXAMPLES
    454 
    455 Just base64 encode a binary file:
    456 
    457  openssl base64 -in file.bin -out file.b64
    458 
    459 Decode the same file
    460 
    461  openssl base64 -d -in file.b64 -out file.bin
    462 
    463 Encrypt a file using AES-128 using a prompted password
    464 and PBKDF2 key derivation:
    465 
    466  openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128
    467 
    468 Decrypt a file using a supplied password:
    469 
    470  openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt \
    471     -pass pass:<password>
    472 
    473 Encrypt a file then base64 encode it (so it can be sent via mail for example)
    474 using AES-256 in CTR mode and PBKDF2 key derivation:
    475 
    476  openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256
    477 
    478 Base64 decode a file then decrypt it using a password supplied in a file:
    479 
    480  openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt \
    481     -pass file:<passfile>
    482 
    483 AES key wrapping:
    484 
    485  openssl enc -e -a -id-aes128-wrap-pad -K 000102030405060708090A0B0C0D0E0F -in file.bin
    486 or
    487  openssl aes128-wrap-pad -e -a -K 000102030405060708090A0B0C0D0E0F -in file.bin
    488 
    489 =head1 BUGS
    490 
    491 The B<-A> option when used with large files doesn't work properly.
    492 On the other hand, when base64 decoding without the B<-A> option,
    493 if the first 1024 bytes of input do not include a newline character
    494 the first two lines of input are ignored.
    495 
    496 The B<openssl enc> command only supports a fixed number of algorithms with
    497 certain parameters. So if, for example, you want to use RC2 with a
    498 76 bit key or RC4 with an 84 bit key you can't use this program.
    499 
    500 =head1 SEE ALSO
    501 
    502 L<openssl-list(1)>, L<EVP_SKEY(3)>
    503 
    504 =head1 HISTORY
    505 
    506 The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0.
    507 
    508 The B<-list> option was added in OpenSSL 1.1.1e.
    509 
    510 The B<-ciphers> and B<-engine> options were deprecated in OpenSSL 3.0.
    511 
    512 The B<-saltlen> option was added in OpenSSL 3.2.
    513 
    514 The B<-skeymgmt> and B<-skeyopt> options were added in OpenSSL 3.5.
    515 
    516 =head1 COPYRIGHT
    517 
    518 Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved.
    519 
    520 Licensed under the Apache License 2.0 (the "License").  You may not use
    521 this file except in compliance with the License.  You can obtain a copy
    522 in the file LICENSE in the source distribution or at
    523 L<https://www.openssl.org/source/license.html>.
    524 
    525 =cut
    526