openssl加密文件或文件夹
linux下的加密软件非常多,如encfs、cryptkeeper(该工具是encfs的再包装)、cryptsetup luks 等,对于文件的加密,连vim也可以操作。但想找一个一般的发行版里都预装的,经常用到的工具来实现,于是就发现了openssl 。openssl是ssh、apache等众多软件的加密组件,所以几乎所有的发行版的unixlinux里都会预装 。
一、openssl相关参数
一直没找到查看openssl使用参数的方法,通过下面的方法给出了一个提示:
1yang@yang-K40IE ~ $ openssl enc -h
2unknown option '-h'
3options are
4-in <file> input file
5-out <file> output file
6-pass <arg> pass phrase source
7-e encrypt
8-d decrypt
9-a/-base64 base64 encode/decode, depending on encryption flag
10-k passphrase is the next argument
11-kfile passphrase is the first line of the file argument
12-md the next argument is the md to use to create a key
13 from a passphrase. One of md2, md5, sha or sha1
14-S salt in hex is the next argument
15-K/-iv key/iv in hex is the next argument
16-[pP] print the iv/key (then exit if -P)
17-bufsize <n> buffer size
18-nopad disable standard block padding
19-engine e use engine e, possibly a hardware device.
20Cipher Types
21-aes-128-cbc -aes-128-cfb -aes-128-cfb1
22-aes-128-cfb8 -aes-128-ctr -aes-128-ecb
23-aes-128-gcm -aes-128-ofb -aes-128-xts
24-aes-192-cbc -aes-192-cfb -aes-192-cfb1
25-aes-192-cfb8 -aes-192-ctr -aes-192-ecb
26-aes-192-gcm -aes-192-ofb -aes-256-cbc
27-aes-256-cfb -aes-256-cfb1 -aes-256-cfb8
28-aes-256-ctr -aes-256-ecb -aes-256-gcm
29-aes-256-ofb -aes-256-xts -aes128
30-aes192 -aes256 -bf
31-bf-cbc -bf-cfb -bf-ecb
32-bf-ofb -blowfish -camellia-128-cbc
33-camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8
34-camellia-128-ecb -camellia-128-ofb -camellia-192-cbc
35-camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8
36-camellia-192-ecb -camellia-192-ofb -camellia-256-cbc
37-camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8
38-camellia-256-ecb -camellia-256-ofb -camellia128
39-camellia192 -camellia256 -cast
40-cast-cbc -cast5-cbc -cast5-cfb
41-cast5-ecb -cast5-ofb -des
42-des-cbc -des-cfb -des-cfb1
43-des-cfb8 -des-ecb -des-ede
44-des-ede-cbc -des-ede-cfb -des-ede-ofb
45-des-ede3 -des-ede3-cbc -des-ede3-cfb
46-des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ofb
47-des-ofb -des3 -desx
48-desx-cbc -id-aes128-GCM -id-aes192-GCM
49-id-aes256-GCM -rc2 -rc2-40-cbc
50-rc2-64-cbc -rc2-cbc -rc2-cfb
51-rc2-ecb -rc2-ofb -rc4
52-rc4-40 -rc4-hmac-md5 -seed
53-seed-cbc -seed-cfb -seed-ecb
54-seed-ofb
上面列出的是主要的几个参数,下面列出来的是支持的加密类型 。几个参数的意义从E文上看也比较好理解,经常用到的也就四个参数
1-e/-d 加密/解密
2-in 要被加/解密的文件
3-out 被加/解密后的文件
二、密码加密
1、对普通文件加密和解密
加密
1openssl enc -aes-128-ecb -e -in myfile -out myfile-aes
解密
1openssl enc -aes-128-ecb -d -in myfile-aes -out myfile
2、通过配合tar压缩对文件夹加密和解决
1打包并加密文件夹
2tar czvf - yincan|openssl des3 -salt -k password -out yincan.tar.gz
3解密并解包文件夹
4openssl des3 -d -k password -salt -in yincan.tar.gz |tar zxvf -
该例中以des3加密方式,设置密码为password的方式加密yincan文件夹并将加密后的文件输出为yincan.tar.gz ,同样,解决的方法类似 。本例和例1中的除了加密方式不同外,使用-k参数,这样就免出了让提示输密码的麻烦 。这样可以方便以脚本的方式对mysql之类的敏感文件进行备份后进行保护 。
当然,上面的操作也可以分两步来完成,第一步先通过tar czvf yincan.tar.gz yincan 进行打包备份 。第二步再通过openssl des3 -salt -k 加密密码 -in $in.tar.gz -out $out.tar.gz 的方式加密。
三、密钥的方式加密和解密
使用密码时,难免会忘记。而且密码太简单时,加密强度可能也不够强,这时可以能过密钥的方式进行加密和解密 。
1、生成一个密钥:
1openssl genrsa -out test.key 1024
生成出来的文件是包含了公钥和密钥两部分的,即该文件即可以用于加密也可以用于解密 。这样的话也会很不安全,一旦服务器被入侵,别人就可以通过备份脚本找到key文件,并利用该文件进行解密。
所以更好的方法是将公钥从中剥离出来,用于加密(仅能用来加密,无法用来解密 ),另外的一个文件(包含 公钥和私钥的文件)进行解密 。
2、提取公钥
1openssl rsa -in test.key -pubout -out test_pub.key
2#其中test_pub.key为公钥文件,test.key即有公钥也有私钥
3、利用公钥加密文件
1openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en
此处利用公钥加密了hello文件,并输出为hello.en ,-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。
4、利用私钥进行解密
1openssl rsautl -decrypt -in hello.en -inkey test.key -out hello
四、使用证书的方式加密文件或文件夹
证书加密方式同密钥方式类似 ,不过是又在密钥的基础上又新增了一层加密,更加增加了确解的难度,使逆方法或反向解密的几率为0 。具体做法如下:
1、通过dsa或rsa算法生成私钥
1#采用DSA算法
2$ openssl dsaparam -noout -out dsakey0.pem -genkey 1024
3#采用RSA算法
4$ openssl genrsa -out rsakey0.pem 1024
2、通过私钥文件生成证书
1#产生DSA算法的证书
2$ openssl req -x509 -key dsakey0.pem -days 365 -out mycert-dsa.pem -new
3#产生RSA算法的证书
4$ openssl req -x509 -key rsakey0.pem -days 365 -out mycert-rsa.pem -new
3、使用证书加密文件
1openssl smime -encrypt -in test.txt -out etest.txt mycert-rsa.pem
4、使用私钥进行解密
1openssl smime -decrypt -in etest.txt -inkey rsakey0.pem -out dtest.txt
该方式一般在邮件系统上用的比较多。
参考页面:
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/openssl-encrypt-file/2692.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.