Linux 基于tar与openssl加密解密压缩包

跨公网传输备份文件是运维和DBA们经常干的活,但是未经加密的压缩文件在公网上传输,就好比在亚龙湾裸泳,稍不留神就被拍啊,哈哈!本文主要描述通过openssl结合gzip与tar命令来实现加密,再传输那就安心多了。

一、OpenSSL

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。openssl可以实现:秘钥证书管理、对称加密和非对称加密。整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。

在本文中,我们仅仅使用其对称加密方式。

对称加密需要使用的标准命令为 enc ,用法如下:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
      [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
      [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]

常用选项有:

-in filename:指定要加密的文件存放路径

-out filename:指定加密后的文件存放路径

-salt:自动插入一个随机数作为文件内容加密,默认选项

-e:可以指明一种加密算法,若不指的话将使用默认加密算法

-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致

-a/-base64:使用-base64位编码格式
示例:
# more /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

# echo "This is a test file">>samp.txt
# openssl enc -e -des3 -a -salt -in samp.txt -out samp.code
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

# more samp.code 
U2FsdGVkX19modQGUDk7yCxiOes+cUJVduNeSlwVFMCAA6J2gVVL9Q==

# openssl enc -d -des3 -a -salt -in samp.code -out samp.decode
enter des-ede3-cbc decryption password:
# more samp.decode 
This is a test file

二、基于重定向加密tar压缩文件

1、加密
在下面的演示中,tar压缩/u02/mysqlbak目录下所有文件,然后通过重定向的方式传递给openssl加密
在加密完成后通过重定向的方式传递给dd命令进行输出

[root@node249 ~]# ls -hltr /u02/mysqlbak/
total 3.6G
-rw-r--r-- 1 root root 3.6G Apr  4 10:09 alldb_201804041001.sql
-rw-r--r-- 1 root root 2.9K Apr 28 11:32 grants.sql
drwxr-xr-x 2 root root  25 Apr 28 11:33 201804

[root@node249 ~]# tar -czPf - /u02/mysqlbak |openssl enc -e -des3 -a -salt -k PassW@rd | dd of=mysqlbak.tar.gz.desc
1353916+1 records in      ### Author : Leshami
1353916+1 records out   ### Blog : https://blog.csdn.net/leshami
693205362 bytes (693 MB) copied, 59.6633 s, 11.6 MB/s

[root@node249 ~]# head mysqlbak.tar.gz.desc 
U2FsdGVkX18LxuJy6XZp+u42acigrJuJk9I432hUCiZib8pCV+MOjGetFyfnurOh
mvvEvJ/SftyzPxTZWYYObLV8ZsRJXCSgMmcOHBQWhtrRAc80F88J36Pg3GLa9uhx
dhz94ZVdhgEdyKe3r2MhBvqssVHlfrW/LTZfPzfGfqnkbNnvtRojF2f0hllhNI7w
AucUI2Nd5XLUX5aSZ2PnFWo3VSsBw5LmKPmFKiqw95tMU0xTYD1BCfViqztA3IvN
iYDh1Gd+hxg1W3k0YKh1fMRIzRlKM+5Gkbb25SI/Cmwk8M+QRChmz39cuQaOoRh6
ILWvN8DsiH6dTkgiERRfppyj7/2xl0DCNeUXc34bX51qpwtnsopxRy/GKSvU9BQZ
zBdV22nf1Q0uLIkqMx22CyVeZWIvbTlyZ70ObiRmxciMP7l2H45svGvdz/Z8Ii+G
xvomS62WhTQkbM4aDOOHfVnDrI/mQAZHci5yASLETD0SaU1Fh3j+M0mq97Wz0hjA
H0gWakoy6VpsQHdp5UVRWEvnKLI5LN5MCJ/UJQXj7Dchh9YxldMVr1H4WT/kQ7iv
A0eO5PufitWAGyqnlCRHUh1iR2LxVM+taMYnAo2qPlm0X9QtC56N3UAkajrFpeEI
2、解密
在下面的演示中,先使用dd 命令输入文件,然后通过管道符传递给openssl进行解密
最后通过管道符传输给tar命令进行解压

[root@node249 ~]# rm -rf /u02/mysqlbak/*
[root@node249 ~]# 
[root@node249 ~]# dd if=mysqlbak.tar.gz.desc |openssl enc -d -des3 -a -salt -d -k PassW@rd | tar -zxPf -
1353919+1 records in
1353919+1 records out
693206857 bytes (693 MB) copied, 24.7343 s, 28.0 MB/s
[root@node249 ~]# ls -hltr /u02/mysqlbak
total 3.6G
-rw-r--r-- 1 root root 3.6G Apr  4 10:09 alldb_201804041001.sql
-rw-r--r-- 1 root root 2.9K Apr 28 11:32 grants.sql
drwxr-xr-x 2 root root  25 Apr 28 11:33 201804

说明,如果不想覆盖原有文件,tar命令解压时去掉P参数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白安全

小白博客 Linux下暴力破解工具Hydra详解

Number one of the biggest security holes are passwords, as every password secu...

6657
来自专栏小文博客

为你的博客注册登陆页面添加【十以内运算验证码】

1312
来自专栏何俊林

RxJava 在Android中的应用

RxJava 是什么, 能解决什么问题 对比其他技术理解为什么要选择RxJava RxJava的相关API RxJava在Android中的典型使用场景 RxJ...

2577
来自专栏码神联盟

短信 | 教你使用 JAVA实现 【短信发送】 功能

5174
来自专栏小筱月

https 加密、http2.0、keep-alive

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏...

1400
来自专栏子勰随笔

Android签名校验机制(数字证书)

70211
来自专栏开源优测

[接口测试_B] 10 requests处理SSL证书验证

可以看到,将verify设为False后,可以跳过ssl验证,但存在一个告警信息InsecureRequestWarning。要忽略这个告警信息可以怎么做呢?

1261
来自专栏IMWeb前端团队

Nodejs进阶:核心模块https 之 如何优雅的访问12306

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 模块概览 这个模块的重要性,基本不用强调了。在网络安全问题日益严峻的今天,...

29310
来自专栏大内老A

[WCF安全系列]实例演示:TLS/SSL在WCF中的应用[SSL over TCP]

在接下来的系列文章中我们正是讨论关于身份认证的主题。在前面我们已经谈到了,WCF中的认证属于“双向认证”,既包括服务对客户端的认证(以下简称客户端认证),也包括...

2707
来自专栏Ryan Miao

spring boot启用tomcat ssl

首先要生成一个keystore证书。参考:Tomcat创建HTTPS访问,java访问https,ssl证书生成:cer&jks文件生成摘录,spring-bo...

62214

扫码关注云+社区

领取腾讯云代金券