Linux下对文件进行加密和解密
当使用文本文档保存网站账户和密码时,对文本文件进行加密以保证文件不慎泄露给他人时不会暴露自己的网站账户和密码。
大多数发行版会自带有openssl,或是安装openssh时会顺带安装openssl。因此以下以openssl为例。
运行openssl help可以看到其所支持的加密、校验方式:
Message Digest commands (see the `dgst' command for more details)
blake2b512 blake2s256 gost md4
md5 rmd160 sha1 sha224
sha256 sha3-224 sha3-256 sha3-384
sha3-512 sha384 sha512 sha512-224
sha512-256 shake128 shake256 sm3
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 aria-128-cbc aria-128-cfb
aria-128-cfb1 aria-128-cfb8 aria-128-ctr aria-128-ecb
aria-128-ofb aria-192-cbc aria-192-cfb aria-192-cfb1
aria-192-cfb8 aria-192-ctr aria-192-ecb aria-192-ofb
aria-256-cbc aria-256-cfb aria-256-cfb1 aria-256-cfb8
aria-256-ctr aria-256-ecb aria-256-ofb 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
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 sm4-cbc sm4-cfb
sm4-ctr sm4-ecb sm4-ofb
此处不评估各方式的性能,评估openssl算法性能的方法见测试平台在linux下的ssl性能。
假设当前路径下有个password.txt文件,使用如下命令可使用aes-256-cbc对该文件进行加密,并将加密后的文件保存为password.aes:
openssl enc -aes-256-cbc -in password.txt -out password.aes
在加密前会提示要求输入加密的密码,附加-k参数可以指定该密码,例如指定密码为123456:
openssl enc -aes-256-cbc -in password.txt -out password.aes -k "123456"
需要解密时,通过增加-d参数,并将加密时的输出文件作为解密时的输入文件即可:
openssl enc -aes-256-cbc -in password.aes -out password.out -k "123456" -d
之后加密后的内容会解密在password.out。
平常保存加密后的文件,需要时将文件解密,并及时删除明文文件,可提高密码文件保存的安全性。
附:一个使用输出重定向(Linux输出重定向的若干应用)将文件加密并转换为base64的例子。
此处明文为"test",密码为使用文本"123"计算的md5sum。
$ echo "test" | openssl enc -aes-256-cbc -k $(echo "123" | md5sum) | base64
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
U2FsdGVkX1+g5gOpEvcDtnTu08HhK3NkRNX115LWPfQ=
将所得到的base64先解码在通过openssl解密即可得到明文:
$ echo "U2FsdGVkX1+g5gOpEvcDtnTu08HhK3NkRNX115LWPfQ=" | base64 -d | openssl enc -aes-256-cbc -d -k $(echo "123" | md5sum)
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
test