openssl

相关参数

options are
-in <file>     input file
-out <file>    output file
-pass <arg>    pass phrase source
-e             encrypt
-d             decrypt
-a/-base64     base64 encode/decode, depending on encryption flag
-k             passphrase is the next argument
-kfile         passphrase is the first line of the file argument
-md            the next argument is the md to use to create a key
                 from a passphrase. See openssl dgst -h for list.
-S             salt in hex is the next argument
-K/-iv         key/iv in hex is the next argument
-[pP]          print the iv/key (then exit if -P)
-bufsize <n>   buffer size
-nopad         disable standard block padding
-engine e      use engine e, possibly a hardware device.
Cipher Types
-aes-128-cbc               -aes-128-cbc-hmac-sha1     -aes-128-cfb              
-aes-128-cfb1              -aes-128-cfb8              -aes-128-ctr              
-aes-128-ecb               -aes-128-gcm               -aes-128-ofb              
-aes-128-xts               -aes-192-cbc               -aes-192-cfb              
-aes-192-cfb1              -aes-192-cfb8              -aes-192-ctr              
-aes-192-ecb               -aes-192-gcm               -aes-192-ofb              
-aes-256-cbc               -aes-256-cbc-hmac-sha1     -aes-256-cfb              
-aes-256-cfb1              -aes-256-cfb8              -aes-256-ctr              
-aes-256-ecb               -aes-256-gcm               -aes-256-ofb              
-aes-256-xts               -aes128                    -aes192                   
-aes256                    -bf                        -bf-cbc                   
-bf-cfb                    -bf-ecb                    -bf-ofb                   
-blowfish                  -camellia-128-cbc          -camellia-128-cfb         
-camellia-128-cfb1         -camellia-128-cfb8         -camellia-128-ecb         
-camellia-128-ofb          -camellia-192-cbc          -camellia-192-cfb         
-camellia-192-cfb1         -camellia-192-cfb8         -camellia-192-ecb         
-camellia-192-ofb          -camellia-256-cbc          -camellia-256-cfb         
-camellia-256-cfb1         -camellia-256-cfb8         -camellia-256-ecb         
-camellia-256-ofb          -camellia128               -camellia192              
-camellia256               -cast                      -cast-cbc                 
-cast5-cbc                 -cast5-cfb                 -cast5-ecb                
-cast5-ofb                 -des                       -des-cbc                  
-des-cfb                   -des-cfb1                  -des-cfb8                 
-des-ecb                   -des-ede                   -des-ede-cbc              
-des-ede-cfb               -des-ede-ofb               -des-ede3                 
-des-ede3-cbc              -des-ede3-cfb              -des-ede3-cfb1            
-des-ede3-cfb8             -des-ede3-ofb              -des-ofb                  
-des3                      -desx                      -desx-cbc                 
-id-aes128-GCM             -id-aes128-wrap            -id-aes128-wrap-pad       
-id-aes192-GCM             -id-aes192-wrap            -id-aes192-wrap-pad       
-id-aes256-GCM             -id-aes256-wrap            -id-aes256-wrap-pad       
-id-smime-alg-CMS3DESwrap  -idea                      -idea-cbc                 
-idea-cfb                  -idea-ecb                  -idea-ofb                 
-rc2                       -rc2-40-cbc                -rc2-64-cbc               
-rc2-cbc                   -rc2-cfb                   -rc2-ecb                  
-rc2-ofb                   -rc4                       -rc4-40                   
-rc4-hmac-md5              -seed                      -seed-cbc                 
-seed-cfb                  -seed-ecb                  -seed-ofb  



Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             ts                verify            version           
x509              

Message Digest commands (see the `dgst' command for more details)
md2               md4               md5               rmd160            
sha               sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            seed              seed-cbc          seed-cfb          
seed-ecb          seed-ofb          zlib

上面列出主要的几个参数,支持的加密类型。

经常用到的参数:

-k  之后参数是密码
-e/-d 加密/解密
-in 要被加/解密的文件
-out 被加/解密后的文件

对普通文件加密和解密

#加密
openssl enc -aes-128-ecb -e -in myfile-in -out myfile-out

#解密
openssl enc -aes-128-ecb -d -in myfile-in -out myfile-out

通过配合tar压缩对文件夹加密和解决

#打包并加密文件夹
tar czvf - test | openssl des3 -salt -k password -out test.tar.gz
#解密并解包文件夹
openssl des3 -d -k password -salt -in test.tar.gz |tar zxvf -

这里以des3加密方式,设置密码为password的方式加密test文件夹并将加密后的文件输出为test.tar.gz ,同样,解决的方法类似 。本例和前面的除了加密方式不同外,使用-k参数,这样就免出了让提示输密码的麻烦 。这样可以方便以脚本的方式敏感文件进行备份后进行保护。

当然,上面的操作也可以分两步来完成,第一步先通过

tar czvf test.tar.gz test

进行打包备份 。第二步再通过

openssl des3 -salt -k 加密密码 -in $in.tar.gz -out $out.tar.gz

的方式加密。

密钥的方式加密和解密

使用密码时,难免会忘记。而且密码太简单时,加密强度可能也不够强,这时可以能过密钥的方式进行加密和解密。

生成一个密钥:

openssl genrsa -out test.key 1024

生成出来的文件是包含了公钥和密钥两部分的,即该文件即可以用于加密也可以用于解密。这样的话也会很不安全,一旦服务器被入侵,别人就可以通过备份脚本找到key文件,并利用该文件进行解密。

所以更好的方法是将公钥从中剥离出来,用于加密(仅能用来加密,无法用来解密),另外的一个文件(包含公钥和私钥的文件)进行解密 。

提取公钥

openssl rsa -in test.key -pubout -out test_pub.key
#其中test_pub.key为公钥文件,test.key即有公钥也有私钥

利用公钥加密文件

openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en

此处利用公钥加密了hello文件,并输出为hello.en ,-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

利用私钥进行解密

openssl rsautl -decrypt -in hello.en -inkey test.key -out hello

使用证书的方式加密文件或文件夹

证书加密方式同密钥方式类似 ,不过是又在密钥的基础上又新增了一层加密,更加增加了确解的难度,使逆方法或反向解密的几率为0 。具体做法如下:

通过dsa或rsa算法生成私钥

#采用DSA算法
$ openssl dsaparam -noout -out dsakey0.pem -genkey 1024
#采用RSA算法
$ openssl genrsa -out rsakey0.pem 1024

通过私钥文件生成证书

#产生DSA算法的证书
$ openssl req -x509 -key dsakey0.pem -days 365 -out mycert-dsa.pem -new
#产生RSA算法的证书
$ openssl req -x509 -key rsakey0.pem -days 365 -out mycert-rsa.pem -new

使用证书加密文件

openssl smime   -encrypt -in test.txt -out etest.txt mycert-rsa.pem

使用私钥进行解密

openssl smime  -decrypt -in etest.txt -inkey rsakey0.pem  -out dtest.txt

该方式一般在邮件系统上用的比较多。


http://www.361way.com/openssl-encrypt-file/2692.html

https://www.openssl.org/

http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=encryption:openssl%E5%B7%A5%E5%85%B7%E7%AE%80%E4%BB%8B