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