# openssl ## 相关参数 ```text options are -in input file -out output file -pass 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 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 ``` ---- 上面列出主要的几个参数,支持的加密类型。 经常用到的参数: ```text -k 之后参数是密码 -e/-d 加密/解密 -in 要被加/解密的文件 -out 被加/解密后的文件 ``` *对普通文件加密和解密* ```bash #加密 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压缩对文件夹加密和解决* ```bash #打包并加密文件夹 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参数,这样就免出了让提示输密码的麻烦 。这样可以方便以脚本的方式敏感文件进行备份后进行保护。 当然,上面的操作也可以分两步来完成,第一步先通过 ```bash tar czvf test.tar.gz test ``` 进行打包备份 。第二步再通过 ```bash openssl des3 -salt -k 加密密码 -in $in.tar.gz -out $out.tar.gz ``` 的方式加密。 *密钥的方式加密和解密* 使用密码时,难免会忘记。而且密码太简单时,加密强度可能也不够强,这时可以能过密钥的方式进行加密和解密。 生成一个密钥: ```bash openssl genrsa -out test.key 1024 ``` 生成出来的文件是包含了公钥和密钥两部分的,即该文件即可以用于加密也可以用于解密。这样的话也会很不安全,一旦服务器被入侵,别人就可以通过备份脚本找到key文件,并利用该文件进行解密。 所以更好的方法是将公钥从中剥离出来,用于加密(仅能用来加密,无法用来解密),另外的一个文件(包含公钥和私钥的文件)进行解密 。 提取公钥 ```bash openssl rsa -in test.key -pubout -out test_pub.key #其中test_pub.key为公钥文件,test.key即有公钥也有私钥 ``` 利用公钥加密文件 ```bash openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en ``` 此处利用公钥加密了hello文件,并输出为hello.en ,-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。 利用私钥进行解密 ```bash openssl rsautl -decrypt -in hello.en -inkey test.key -out hello ``` *使用证书的方式加密文件或文件夹* 证书加密方式同密钥方式类似 ,不过是又在密钥的基础上又新增了一层加密,更加增加了确解的难度,使逆方法或反向解密的几率为0 。具体做法如下: 通过dsa或rsa算法生成私钥 ```bash #采用DSA算法 $ openssl dsaparam -noout -out dsakey0.pem -genkey 1024 #采用RSA算法 $ openssl genrsa -out rsakey0.pem 1024 ``` 通过私钥文件生成证书 ```bash #产生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 ``` 使用证书加密文件 ```bash openssl smime -encrypt -in test.txt -out etest.txt mycert-rsa.pem ``` 使用私钥进行解密 ```bash 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