linux对字符串加密,Linux系统下对文件和字符串 进行加密的方法总结

为了安全考虑,通常会对一些字符或重要文件进行加密安全处理,下面对文件或字符串加解密方法做一总结,方便日常运维工作中使用。

一、对文件进行加密/解密方法

方法一:gzexe加密

这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。示例如下:[root@ipsan-node03 ~]# echo "hahahaha" > a.txt

[root@ipsan-node03 ~]# cat a.txt

hahahaha

[root@ipsan-node03 ~]# ls a.txt

a.txt

[root@ipsan-node03 ~]# gzexe a.txt

a.txt:    22.2%

[root@ipsan-node03 ~]# ls

a.txt  a.txt~

gzexe方法会把原来没有加密的文件a.txt备份为a.txt~ ,同时a.txt文件变成了加密文件(即变成了密文)

[root@ipsan-node03 ~]# cat a.txt

쏎????螳????p¹\v£????y«0

Fc????؃ÿE????0´ûm

Ͱ:n$9hss4¢03

NeAEؚVºY¯׻ѿ¾¹«*霻­+]ᚚaΜ

Y$@:Wj%

.iȣ¬Z®:J ¦b¶mC

[root@ipsan-node03 ~]# cat a.txt~

hahahaha

通常使用gzexe加密后,会将备份文件(这里指a.txt~)删除

[root@ipsan-node03 ~]# ls

a.txt  a.txt~

[root@ipsan-node03 ~]# rm -f a.txt~

[root@ipsan-node03 ~]# ls

a.txt

使用-d参数进行解压操作

[root@ipsan-node03 ~]# gzexe --help

Usage: /usr/bin/gzexe [OPTION] FILE...

Rename each FILE with a compressed version of itself, renaming FILE to FILE~.

-d             Decompress each FILE instead of compressing it.

--help     display this help and exit

--version  output version information and exit

Report bugs to .

解压之后的文件a.txt内容就会还原回来,同时也会将之前的加密文件变成a.txt~,同样,通常也会删除这个a.txt~的备份文件

[root@ipsan-node03 ~]# gzexe -d a.txt

[root@ipsan-node03 ~]# ls

a.txt  a.txt~

[root@ipsan-node03 ~]# cat a.txt

hahahaha

[root@ipsan-node03 ~]# cat a.txt~

쏎????螳????p¹\v£????y«0

Fc????؃ÿE????0´ûm

Ͱ:n$9hss4¢03

NeAEؚVºY¯׻ѿ¾¹«*霻­+]ᚚaΜ

Y$@:Wj%

.iȣ¬Z®:J ¦b¶mC

[root@ipsan-node03 ~]# rm -f a.txt~

[root@ipsan-node03 ~]# ls

a.txt

方法二:用tar命令 对文件加密压缩和解压[root@ipsan-node03 ~]# ls

test.txt

[root@ipsan-node03 ~]# cat test.txt

hahahaha

heiheihei

如下命令是对filename文件(test.txt)进行加密压缩,生成filename.des3加密压缩文件,123@123为加密的密码

[root@ipsan-node03 ~]# tar -zcf - test.txt |openssl des3 -salt -k 123@123 | dd of=test.txt.des3

0+1 records in

0+1 records out

152 bytes (152 B) copied, 0.00333366 s, 45.6 kB/s

---------------------------------------------------------------------------------------------------------

也可以将/mnt目录下的所有文件全部加密压缩

[root@ipsan-node03 ~]# tar -zcf - /mnt/* |openssl des3 -salt -k 123@123 | dd of=test.des3

或者根据匹配规则进行加密压缩

[root@ipsan-node03 ~]# tar -zcf - /mnt/pass_* |openssl des3 -salt -k 123@123 | dd of=test.des3

---------------------------------------------------------------------------------------------------------

通常加密后,会将源文件删除

[root@ipsan-node03 ~]# ls

test.txt  test.txt.des3

[root@ipsan-node03 ~]# rm -f test.txt

[root@ipsan-node03 ~]# cat test.txt.des3

Salted__H¡+ZCHaW⃟׬

\bS©|>þHބ*????ܪ³????@ⴹ????????qk)B㲏¡qk;ochl\cz-????/흯

¤ވտ+¾´2AuK????픏̞t悐ah¤ºʀ????d

解压操作:

[root@ipsan-node03 ~]# dd if=test.txt.des3 |openssl des3 -d -k 123@123 | tar zxf -

0+1 records in

0+1 records out

152 bytes (152 B) copied, 4.5873e-05 s, 3.3 MB/s

[root@ipsan-node03 ~]# ls

test.txt  test.txt.des3

[root@ipsan-node03 ~]# cat test.txt

hahahaha

heiheihei

注意命令最后面的"-",它将释放所有文件,

-k 123@123可以没有,没有时在解压时会提示输入密码

方法三:结合Tar和OpenSSL给文件和目录加密及解密当有重要的敏感数据的时候,给文件和目录额外加一层保护是至关重要的,特别是当需要通过网络与他人传输数据的时候。基于这个原因,

可以用到tar(Linux 的一个压缩打包工具)和OpenSSL来解决的方案。借助这两个工具,你真的可以毫不费力地创建和加密 tar 归档文件。

下面介绍使用 OpenSSL创建和加密 tar 或 gz(gzip,另一种压缩文件)归档文件:

牢记使用 OpenSSL 的常规方式是:

# openssl command command-options arguments

示例如下:

[root@ipsan-node03 ~]# cd /mnt/

[root@ipsan-node03 mnt]# ls

[root@ipsan-node03 mnt]# echo "123" > a.txt

[root@ipsan-node03 mnt]# echo "456" > b.txt

[root@ipsan-node03 mnt]# echo "789" > c.txt

[root@ipsan-node03 mnt]# ls

a.txt  b.txt  c.txt

现在要加密当前工作目录的内容(根据文件的大小,这可能需要一点时间)

[root@ipsan-node03 mnt]# tar -czf - * | openssl enc -e -aes256 -out test.tar.gz

enter aes-256-cbc encryption password:                          //假设这里设置的密码为123456

Verifying - enter aes-256-cbc encryption password:

上述命令的解释:

enc 使用加密进行编码

-e  用来加密输入文件的 enc 命令选项,这里是指前一个 tar 命令的输出

-aes256 加密用的算法

-out 用于指定输出文件名的 enc 命令选项,这里文件名是test.tar.gz

[root@ipsan-node03 mnt]# ls

a.txt  b.txt  c.txt  test.tar.gz

[root@ipsan-node03 mnt]# rm -rf a.txt

[root@ipsan-node03 mnt]# rm -rf b.txt

[root@ipsan-node03 mnt]# rm -rf c.txt

[root@ipsan-node03 mnt]# ls

test.tar.gz

对于上面加密后的tar包直接解压肯定是不行的!

[root@ipsan-node03 mnt]# tar -zvxf test.tar.gz

gzip: stdin: not in gzip format

tar: Child returned status 1

tar: Error is not recoverable: exiting now

要解密上述tar归档内容,需要使用以下命令。

[root@ipsan-node03 mnt]# openssl enc -d -aes256 -in test.tar.gz | tar xz -C /mnt/

enter aes-256-cbc decryption password:

[root@ipsan-node03 mnt]# ls

a.txt  b.txt  c.txt  test.tar.gz

上述命令的解释:

-d  用于解密文件

-C  将加压后的文件提取到目标目录下

当你在本地网络或因特网工作的时候,你可以随时通过加密来保护你和他人共享的重要文本或文件,这有助于降低将其暴露给恶意***者的风险。

方法四:shc加密(仅仅对shell脚本加密)shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、

密码等不希望公开的问题。

如果你的shell脚本包含了敏感的口令或者其它重要信息, 而且你不希望用户通过ps -ef(查看系统每个进程的状态)捕获敏感信息. 你可以

使用shc工具来给shell脚本增加一层额外的安全保护. shc是一个脚本编译工具, 使用RC4加密算法, 它能够把shell程序转换成二进制可执

行文件(支持静态链接和动态链接). 该工具能够很好的支持: 需要加密, 解密, 或者通过命令参数传递口令的环境.

shc的官网下载地址:

http://www.datsi.fi.upm.es/~frosal/sources/

安装方法:

[root@ipsan-node03 ~]# cd /usr/local/src/

[root@ipsan-node03 src]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz

[root@ipsan-node03 src]# tar -zvxf shc-3.8.9.tgz

[root@ipsan-node03 src]# cd shc-3.8.9

[root@ipsan-node03 shc-3.8.9]# mkdir -p /usr/local/man/man1

这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下;

将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装

[root@ipsan-node03 shc-3.8.9]# make install

这是要回答yes或者y,不能直接回车,否则会报错

需要注意的是,sch只能能shell脚本文件进行加密,其他文件都不可以!

sch加密使用方法:

"-f"选项指定需要加密的程序

[root@ipsan-node03 ~]# ls

text.sh

[root@ipsan-node03 ~]# cat text.sh

#!/bin/bash

echo "hahaha"

[root@ipsan-node03 ~]# shc -r -f text.sh

[root@ipsan-node03 ~]# ls

text.sh  text.sh.x  text.sh.x.c

注意:要有-r选项, -f 后跟要加密的脚本名。

运行后会生成两个文件,script-name.x 和 script-name.x.c

script-name.x是加密后的可执行的二进制文件.

./script-name.x 即可运行.

script-name.x.c是生成script-name.x的原文件(c语言)

[root@ipsan-node03 ~]# ./text.sh

hahaha

[root@ipsan-node03 ~]# ./text.sh.x

hahaha

通常从安全角度考虑:

使用sch命令对shell脚本文件进行加密后,只需保留.x的二进制文件即可,其他两个文件均可以删除!

[root@ipsan-node03 ~]# ls

text.sh  text.sh.x  text.sh.x.c

[root@ipsan-node03 ~]# rm -rf text.sh

[root@ipsan-node03 ~]# rm -rf text.sh.x.c

[root@ipsan-node03 ~]# ls

text.sh.x

[root@ipsan-node03 ~]# ./text.sh.x

hahaha

另外:

shc还提供了一种设定有效执行期限的方法,可以首先使用shc将shell程序转化为二进制,并加上过期时间,如:

[root@ipsan-node03 ~]# shc -e 28/02/2018 -m "this script file is about to expire" -v -r -f text.sh

shc shll=bash

shc [-i]=-c

shc [-x]=exec '%s' "$@"

shc [-l]=

shc opts=

shc: cc  text.sh.x.c -o text.sh.x

shc: strip text.sh.x

shc: chmod go-r text.sh.x

[root@ipsan-node03 ~]# ls

text.sh  text.sh.x  text.sh.x.c

解释:

-e:指定过期时间为2018年2月28日

-m:过期后打印出的信息;

-v: verbose

-r: 可在相同操作系统的不同主机上执行

-f: 指定源shell

如果在过期后执行,则会有如下提示:

[root@ipsan-node03 ~]# ./text.sh.x

./text.sh.x: this script file is about to expire

使用以上方法要注意,需防止用户更改系统时间,可以通过在程序中加入自动更新系统时间的命令来解决此问题!!

sch的帮助命令:

[root@ipsan-node03 ~]# shc -help

shc Version 3.8.9, Generic Script Compiler

shc Copyright (c) 1994-2012 Francisco Rosales 

shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

-e %s  Expiration date in dd/mm/yyyy format [none]   (指定过期日期)

-m %s  Message to display upon expiration ["Please contact your provider"]  (指定过期提示的信息)

-f %s  File name of the script to compile   (指定要编译的shell的路径及文件名)

-i %s  Inline option for the shell interpreter i.e: -e

-x %s  eXec command, as a printf format i.e: exec('%s',@ARGV);

-l %s  Last shell option i.e: --

-r     Relax security. Make a redistributable binary   (可以相同操作系统的不同系统中执行)

-v     Verbose compilation    (编译的详细情况)

-D     Switch ON debug exec calls [OFF]

-T     Allow binary to be traceable [no]

-C     Display license and exit

-A     Display abstract and exit

-h     Display help and exit

Environment variables used:

Name    Default  Usage

CC      cc       C compiler command

CFLAGS     C compiler flags

Please consult the shc(1) man page.

说明:

经测试,相同在操作系统,shc后的可执行二进制文件直接可以移植运行,但不同操作系统可能会出现问题,

比如将上面的test.sh.x的二进制文件在CentOS6.9上加密后移到redhat as5u4上不能运行,出现"Floating point exception"错误提示,

但移到另一台CentOS6.9上直接运行没问题。

方法五: ZIP加密

1)文件加密

使用命令"zip -e filename.zip filename" 即可出现输入密码的提示,输入2次密码。 此文件即被加密解压时候是需要密码的下面开始为test.txt文件进行加密

[root@centos6-vm02 ~]# cat test.txt

this is a test!!!

[root@centos6-vm02 ~]# zip -e test.txt.zip test.txt         //如下进行加密操作时,需要输入两次密码

Enter password:

Verify password:

adding: test.txt (stored 0%)

[root@centos6-vm02 ~]# ls

test.txt  test.txt.zip

进行解压的时候,需要输入密码

[root@centos6-vm02 ~]# rm -f test.txt

[root@centos6-vm02 ~]# unzip test.txt.zip

Archive:  test.txt.zip

[test.txt.zip] test.txt password:

extracting: test.txt

[root@centos6-vm02 ~]# cat test.txt

this is a test!!!

2)文件夹加密

使用命令"zip -re dirname.zip dirname"即可出现输入密码的提示,输入2次密码。 此文件即被加密解压时候是需要密码的。下面开始对目录进行加密

[root@centos6-vm02 ~]# mkdir dirtest

[root@centos6-vm02 ~]# cat dirtest/haha.txt

this is test of dir!!!

[root@centos6-vm02 ~]# zip -re dirtest.zip dirtest

Enter password:

Verify password:

adding: dirtest/ (stored 0%)

adding: dirtest/haha.txt (stored 0%)

解压目录时需要输入密码

[root@centos6-vm02 ~]# rm -rf dirtest

[root@centos6-vm02 ~]# unzip dirtest.zip

Archive:  dirtest.zip

creating: dirtest/

[dirtest.zip] dirtest/haha.txt password:

extracting: dirtest/haha.txt

[root@centos6-vm02 ~]# ls dirtest

haha.txt

[root@centos6-vm02 ~]# cat dirtest/haha.txt

this is test of dir!!!

方法六:GnuPG加密

GnuPG的全称是GNU隐私保护(GNU Privacy Guard),常常被称为GPG,它结合了一组加密软件。它是由GNU项目用C编程语言编写的。最新的稳定版本是2.0.27。在如今的大多数Linux发行版中,gnupg程序包都是默认随带的,所以万一它没有安装,你可以使用apt或yum从软件库来安装它(yum install gnupg)。注意:gpg只能对文件进行加密,对目录则无法完成加密!下面开始使用GnuPG方式对test.txt文件进行加密

[root@centos6-vm02 ~]# cat test.txt

this is a test!!!

[root@centos6-vm02 ~]# gpg -c test.txt

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory         //这个信息可以忽略

注意:如上加密的时候,会弹出来一个对话框,要求Paraphrase输入两次密码,对这个特定的文件进行加密。

一旦运行带-c选项(完全使用对称密码算法加密)的gpc命令,它会生成一个文件.gpg文件。

[root@centos6-vm02 ~]# ll test.txt*

-rw-r--r--. 1 root root 18 Jan  4 10:08 test.txt

-rw-r--r--. 1 root root 61 Jan  4 10:04 test.txt.gpg

对文件进行加密后,最好将源文件删除!不要再保留源文件了!

[root@centos6-vm02 ~]# rm -f test.txt

文件解密操作。

注意出现Paraphrase提示时,需要提供加密时输入的同一个密码才能解密

[root@centos6-vm02 ~]# gpg test.txt.gpg

gpg: 3DES encrypted data

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

gpg: encrypted with 1 passphrase

gpg: WARNING: message was not integrity protected

[root@centos6-vm02 ~]# ll test.txt*

-rw-r--r--. 1 root root 18 Jan  4 10:08 test.txt

-rw-r--r--. 1 root root 61 Jan  4 10:04 test.txt.gpg

[root@centos6-vm02 ~]# cat test.txt

this is a test!!!

二、对字符串进行加密/解密方法

Linux系统下自带的工具base64可以对字符串进行加密和解决,一般是从标准输入读取文件内容,base64编码并打印到标准输出!使用"base64"或"base64 -i"命令进行字符串加密操作

使用"base64 -d"命令进行字符串加密后的解密操作

如下对字符串"wang@123"进行加密操作:

[root@ss-server ~]# echo "wang@123"|base64

d2FuZ0AxMjMK

[root@ss-server ~]# echo "wang@123"|base64 -i

d2FuZ0AxMjMK

对上面加密后的字符串进行解密操作

[root@ss-server ~]# echo "d2FuZ0AxMjMK"|base64 -d

wang@123

[root@ss-server ~]# echo "wang@123"|base64 -i|base64 -d

wang@123

比如,有时为了安全考虑,需要隐藏tomcat版本,这时可以选择将tomcat版本进行加密

首先查看tomcat版本(在RELEASE-NOTES文件中)

[root@ss-server ~]# vim /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES

........

........

Apache Tomcat Version 8.5.43

Release Notes

获取tomcat版本号

[root@ss-server ~]# cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'

8.5.43

将tomcat版本号加密

[root@ss-server ~]# cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'|base64 -i

OC41LjQzCg==

替换tomcat版本号为加密字符串

[root@ss-server ~]# TOMCAT_VERSION_OLD=$(cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}')

[root@ss-server ~]# TOMCAT_VERSION_NEW=$(cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'|base64 -i)

[root@ss-server ~]# sed -i 's/${TOMCAT_VERSION_OLD}/${TOMCAT_VERSION_NEW}/g' /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES

查看替换后的tomcat版本号

[root@ss-server ~]# cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'

OC41LjQzCg==

===================================================================================

需要注意:

linux系统自带的base64工具有BUG,base64解码有时会莫名出现报错:base64: invalid input。

所以最好还是使用源码包编译安装base64:

[root@ss-server ~]# wget http://www.fourmilab.ch/webtools/base64/base64-1.5.tar.gz

[root@ss-server ~]# tar zxf base64-1.5.tar.gz

[root@ss-server ~]# cd base64-1.5

[root@ss-server base64-1.5]# ./configure

[root@ss-server base64-1.5]# make && make -n install

[root@ss-server base64-1.5]# echo "wang@123" | ./base64 -i

d2FuZ0AxMjMK

[root@ss-server base64-1.5]# echo "wang@123" | ./base64 -i| ./base64 -d

wang@123

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值