openssl加密文件或文件夹

2013年8月15日 发表评论 阅读评论

linux下的加密软件非常多,如encfs、cryptkeeper(该工具是encfs的再包装)、cryptsetup luks 等,对于文件的加密,连vim也可以操作。但想找一个一般的发行版里都预装的,经常用到的工具来实现,于是就发现了openssl  。openssl是ssh、apache等众多软件的加密组件,所以几乎所有的发行版的unixlinux里都会预装 。

一、openssl相关参数

一直没找到查看openssl使用参数的方法,通过下面的方法给出了一个提示:

yang@yang-K40IE ~ $ openssl enc  -h
unknown option '-h'
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.  One of md2, md5, sha or sha1
-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-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-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-aes192-GCM
-id-aes256-GCM             -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

上面列出的是主要的几个参数,下面列出来的是支持的加密类型 。几个参数的意义从E文上看也比较好理解,经常用到的也就四个参数

-e/-d 加密/解密
-in 要被加/解密的文件
-out 被加/解密后的文件

二、密码加密

1、对普通文件加密和解密

加密

openssl enc -aes-128-ecb -e -in myfile -out myfile-aes

解密

openssl enc -aes-128-ecb -d -in myfile-aes -out myfile

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

打包并加密文件夹
tar czvf - yincan|openssl des3 -salt -k password -out yincan.tar.gz
解密并解包文件夹
openssl 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、生成一个密钥:

openssl genrsa -out test.key 1024

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

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

2、提取公钥

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

3、利用公钥加密文件

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

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

4、利用私钥进行解密

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

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

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

1、通过dsa或rsa算法生成私钥

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

2、通过私钥文件生成证书

#产生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

3、使用证书加密文件

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

4、使用私钥进行解密

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

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

参考页面:

turbolinux wiki页

openssl官方文档




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.