这篇文章将通过具体的使用示例,介绍如何使用对称加密算法来对文件进行加密和解密操作。
场景说明: 在前一篇文章中介绍了签名的方式:https://liumiaocn.blog.csdn.net/article/details/103457878。在文章中提到了如何使用公钥和签名文件进行签名的验证,由于上篇文章的签名验证方式只用到了签名文件和公钥,而一同发送的另外一个文件messages则没有使用,如果签名文件在中途被修改了,使用者使用公钥进行签名验证时会提示验证无法通过。但是messages文件没有被修改则没有保证,这篇文章继续介绍一下保证messages文件在传输过程中不被修改的方法。
加密解密流程加密解密的一般流程如下所示:
openssl enc -ciphers下可以列出所支持的对称加密算法的列表
[root@liumiaocn sign]# openssl version OpenSSL 1.1.1d 10 Sep 2019 [root@liumiaocn sign]# openssl enc -ciphers Supported ciphers: -aes-128-cbc -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-ofb -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr -aes-192-ecb -aes-192-ofb -aes-256-cbc -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr -aes-256-ecb -aes-256-ofb -aes128 -aes128-wrap -aes192 -aes192-wrap -aes256 -aes256-wrap -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 -aria128 -aria192 -aria256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ctr -camellia-128-ecb -camellia-128-ofb -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ctr -camellia-192-ecb -camellia-192-ofb -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ctr -camellia-256-ecb -camellia-256-ofb -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc -cast5-cfb -cast5-ecb -cast5-ofb -chacha20 -des -des-cbc -des-cfb -des-cfb1 -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ecb -des-ede-ofb -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ecb -des-ede3-ofb -des-ofb -des3 -des3-wrap -desx -desx-cbc -id-aes128-wrap -id-aes128-wrap-pad -id-aes192-wrap -id-aes192-wrap-pad -id-aes256-wrap -id-aes256-wrap-pad -id-smime-alg-CMS3DESwrap -idea -idea-cbc -idea-cfb -idea-ecb -idea-ofb -rc2 -rc2-128 -rc2-40 -rc2-40-cbc -rc2-64 -rc2-64-cbc -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -seed -seed-cbc -seed-cfb -seed-ecb -seed-ofb -sm4 -sm4-cbc -sm4-cfb -sm4-ctr -sm4-ecb -sm4-ofb [root@liumiaocn sign]#使用示例
无论是DES还是AES系列算法都是传统的对称加密算法,这里以-des为例进行文件加密和解密的说明。
事前准备将messages文件和签名文件放在一起打包,生成messages.tar.gz文件。
[root@liumiaocn sign]# tar czvf messages.tar.gz messages messages.sign messages messages.sign [root@liumiaocn sign]# ls messages messages.sign messages.tar.gz rsa_key.private rsa_key.public [root@liumiaocn sign]#文件加密
使用openssl enc可以指定加密算法对文件进行加密,生成新的加密文件。
[root@liumiaocn sign]# openssl enc -des -in messages.tar.gz -out enc_messages.tar.gz -pass pass:liumiaocn -pbkdf2 [root@liumiaocn sign]# ls -l *.tar.gz -rw-r--r--. 1 root root 512 Dec 9 06:13 enc_messages.tar.gz -rw-r--r--. 1 root root 493 Dec 9 06:13 messages.tar.gz [root@liumiaocn sign]#
实际上新生成的文件enc_messages.tar.gz已经是加密过的了,已经不直接是一个tar.gz格式的文件了,需要解密之后才能使用。
[root@liumiaocn sign]# tar tvf messages.tar.gz -rw-r--r-- root/root 37 2019-12-09 01:07 messages -rw-r--r-- root/root 256 2019-12-09 01:08 messages.sign [root@liumiaocn sign]# [root@liumiaocn sign]# tar tvf enc_messages.tar.gz gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now [root@liumiaocn sign]# [root@liumiaocn sign]#文件解密
文件解密通过-d选项指定解密操作,同时可结合-out指定输出文件,需要注意的是,务必与加密过程中使用的其他参数都保持一致。比如本文反向解密生成解压的文件,执行示例如下所示:
[root@liumiaocn sign]# openssl enc -d -des -in enc_messages.tar.gz -pass pass:liumiaocn -out dec_messages.tar.gz -pbkdf2 [root@liumiaocn sign]# ls -l *.tar.gz -rw-r--r--. 1 root root 493 Dec 9 06:18 dec_messages.tar.gz -rw-r--r--. 1 root root 512 Dec 9 06:13 enc_messages.tar.gz -rw-r--r--. 1 root root 493 Dec 9 06:13 messages.tar.gz [root@liumiaocn sign]#
此时再确认解密后的文件,已经可以正常打开使用了
[root@liumiaocn sign]# tar tvf dec_messages.tar.gz -rw-r--r-- root/root 37 2019-12-09 01:07 messages -rw-r--r-- root/root 256 2019-12-09 01:08 messages.sign [root@liumiaocn sign]#总结
对称加密算法,加密解密用一把钥匙,在命令使用的时候也能很清楚地看到明文保存的密码(liiumiaocn)的使用过程,这篇文章虽然以des为例进行了说明,其他openssl所支持的算法使用起来也几乎一致。