找回密码
 注册
查看: 2036|回复: 1

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

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-7-9 10:16:11 | 显示全部楼层 |阅读模式
一、对文件进行加密/解密方法  P! }5 S1 {8 `) b0 N
方法一:gzexe加密
8 p  c+ r- F' b- Z这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。示例如下:! c' ^6 W" m) t4 ?: O  g
[root@ipsan-node03 ~]# echo "hahahaha" > a.txt2 C! o8 z7 f' l) K
[root@ipsan-node03 ~]# cat a.txt - V0 `- m" Q9 C! W
hahahaha7 y+ L  @( _* W1 M! b2 v
[root@ipsan-node03 ~]# ls a.txt ( i7 ~8 e3 A4 |0 g2 |6 {- p4 m
a.txt
6 B/ D4 s% j7 Q6 N% m[root@ipsan-node03 ~]# gzexe a.txt0 _. c% [) x: [' F; E+ n' B% G. e
a.txt:    22.2%
8 A6 q2 u0 E. p$ R[root@ipsan-node03 ~]# ls; A8 x0 m- p& S- h" l$ g6 T& N
a.txt  a.txt~  
) }6 @6 d6 O  U% n8 }gzexe方法会把原来没有加密的文件a.txt备份为a.txt~ ,同时a.txt文件变成了加密文件(即变成了密文)
1 X. |+ K- y( {/ w4 w[root@ipsan-node03 ~]# cat a.txt                                                                                           4 S# V& A; c6 o
* j* r+ j& e- ~& b  l0 |# T
. Z& Y; C# D  r1 j, b, S( @. f/ ]
[root@ipsan-node03 ~]# cat a.txt~
/ ~4 v3 k* i1 ihahahaha) B2 r8 _4 _& ?$ [8 Y
通常使用gzexe加密后,会将备份文件(这里指a.txt~)删除, H$ |$ _7 p" E/ S, p
[root@ipsan-node03 ~]# ls
2 b$ X. K( G  [; ^a.txt  a.txt~  , t# F5 e1 f) X+ m% d! R
[root@ipsan-node03 ~]# rm -f a.txt~
9 f1 ?/ L- U7 }- T# z[root@ipsan-node03 ~]# ls
' K$ c0 H5 g1 P$ ~* [5 h, ~9 ja.txt1 M4 R* u  s" t3 T! \3 w
使用-d参数进行解压操作7 m4 L2 D* w$ E" q: k
[root@ipsan-node03 ~]# gzexe --help
0 u' J1 b0 {6 g5 b4 ZUsage: /usr/bin/gzexe [OPTION] FILE...2 t9 ?- l4 @( P2 k; q
Rename each FILE with a compressed version of itself, renaming FILE to FILE~.- A1 d0 x/ s$ \9 q  p
  -d             Decompress each FILE instead of compressing it.& w- ^! t& {# ~
      --help     display this help and exit
8 r( g" y6 G: \- c2 z      --version  output version information and exit
4 F0 D) c/ s& ?5 sReport bugs to <bug-gzip@gnu.org>.: a8 W/ }: m) g* q) k3 \* p3 t
解压之后的文件a.txt内容就会还原回来,同时也会将之前的加密文件变成a.txt~,同样,通常也会删除这个a.txt~的备份文件. k) L: k. k5 n/ |
[root@ipsan-node03 ~]# gzexe -d a.txt $ B, E9 I/ Z5 A' i! F
[root@ipsan-node03 ~]# ls! B- s& [  J. V4 ^" m. k7 j
a.txt  a.txt~  
/ n1 p, l9 D+ B[root@ipsan-node03 ~]# cat a.txt
9 Y9 C) F' k+ f0 v1 e* vhahahaha
$ q0 ^, S3 Q! R+ J0 k, N
1 S! z( Z' c. n5 X4 B. I4 Q+ `8 P/ e3 m; z0 @7 {0 q
[root@ipsan-node03 ~]# rm -f a.txt~5 _7 D5 ?$ B! L9 u3 W0 R
[root@ipsan-node03 ~]# ls4 n! O3 g: J, `. @2 ^" \) r
a.txt
. W% \  C+ q# W, F方法二:用tar命令 对文件加密压缩和解压
. M  ^+ D! m8 ?" u- p) ]3 w0 n* g[root@ipsan-node03 ~]# ls  a: \: ?! r2 v# o' `( U8 c
test.txt
# ~! w  X6 S) g7 O. D3 q% b5 y: ~[root@ipsan-node03 ~]# cat test.txt- A. d( Y! W8 ?& _
hahahaha/ x9 R  v, L. R2 G
heiheihei
( y5 y2 k: _( C7 A, U3 U- V1 \  
+ B6 i$ G' _0 \0 U' @- T如下命令是对filename文件(test.txt)进行加密压缩,生成filename.des3加密压缩文件,123@123为加密的密码
& ~  L3 ~% M' s[root@ipsan-node03 ~]# tar -zcf - test.txt |openssl des3 -salt -k 123@123 | dd of=test.txt.des3
; |5 G5 U9 n: M' @  V0+1 records in& J" o3 j% S4 z  q' ^( _6 p
0+1 records out8 D) n$ ?' y4 V9 d' J
152 bytes (152 B) copied, 0.00333366 s, 45.6 kB/s
& O3 L) D! c# [* i) B/ y( b---------------------------------------------------------------------------------------------------------
6 t0 l* x: r. Q2 V1 o也可以将/mnt目录下的所有文件全部加密压缩5 @  w8 F9 z9 M& f! `2 V
[root@ipsan-node03 ~]# tar -zcf - /mnt/* |openssl des3 -salt -k 123@123 | dd of=test.des3
2 E$ b1 n" }3 }$ p" h8 a或者根据匹配规则进行加密压缩! V2 ?& Y( g& K: U  d( A( h
[root@ipsan-node03 ~]# tar -zcf - /mnt/pass_* |openssl des3 -salt -k 123@123 | dd of=test.des39 |- J" h8 r. D) Y" g
---------------------------------------------------------------------------------------------------------
. X3 ?2 r! [" |8 j2 X  1 R$ m" z  v1 D0 \) v
通常加密后,会将源文件删除+ t$ s6 W# `5 I, u! a+ [
[root@ipsan-node03 ~]# ls+ O. n- [1 E0 P; D$ V- O
test.txt  test.txt.des3+ e5 p0 K' M" ~4 c7 L) _- ]  D
[root@ipsan-node03 ~]# rm -f test.txt
% C! p: z8 {: q3 F[root@ipsan-node03 ~]# cat test.txt.des39 Y' g( {+ o" L2 t# Q( a4 a! d
5 m; l1 i5 O% L; n7 s4 z9 H
解压操作:
" ?  _- @) t3 _5 Y! a9 q[root@ipsan-node03 ~]# dd if=test.txt.des3 |openssl des3 -d -k 123@123 | tar zxf -7 c+ K! E( e2 P% R& Z9 U  N: G
0+1 records in+ o3 z, b, J" e) l  y# g6 D- ]
0+1 records out
! ?# e9 I! b1 w  B0 G: c152 bytes (152 B) copied, 4.5873e-05 s, 3.3 MB/s
% H* @; @! X, _9 V  - i2 ?! J( w) A2 \4 v6 L
[root@ipsan-node03 ~]# ls. j; |' H9 ~; H1 A2 J1 i& D3 I
test.txt  test.txt.des3  U5 ~7 r1 h& y  m5 n/ ~
[root@ipsan-node03 ~]# cat test.txt) [, j/ T) A9 N
hahahaha
8 N  J( Y% f6 E: \- {1 Hheiheihei" G; T& v& m$ T5 O, j/ Q
  
0 l/ H. E1 C' [2 _- l$ c注意命令最后面的"-",它将释放所有文件,) K% r1 c9 h  \$ v
-k 123@123可以没有,没有时在解压时会提示输入密码" c! P7 o6 t- X
方法三:结合Tar和OpenSSL给文件和目录加密及解密
# c% F2 U% l- s7 Y当有重要的敏感数据的时候,给文件和目录额外加一层保护是至关重要的,特别是当需要通过网络与他人传输数据的时候。基于这个原因,  J) \  s( P& v1 o5 j
可以用到tar(Linux 的一个压缩打包工具)和OpenSSL来解决的方案。借助这两个工具,你真的可以毫不费力地创建和加密 tar 归档文件。
- v. @: J& u( @0 ^; t8 K+ h下面介绍使用 OpenSSL创建和加密 tar 或 gz(gzip,另一种压缩文件)归档文件:
4 a8 ?( M8 e# H4 _0 r( a牢记使用 OpenSSL 的常规方式是:: h. J; r5 f& {* d
# openssl command command-options arguments' s& _; L  {# z$ d9 n+ C8 b
示例如下:  E% Q: m9 |. M
[root@ipsan-node03 ~]# cd /mnt/+ n0 _. h) @; B! F; O
[root@ipsan-node03 mnt]# ls
; u0 r1 V1 [# E2 ]5 r' `! O: x[root@ipsan-node03 mnt]# echo "123" > a.txt
. J" c0 |4 B, \! ]8 W* N( r  Y[root@ipsan-node03 mnt]# echo "456" > b.txt
7 x) k% V2 x  Q0 S[root@ipsan-node03 mnt]# echo "789" > c.txt
% V+ u7 `+ Y! O. [[root@ipsan-node03 mnt]# ls
  K: m0 X2 x* \" t9 ~6 D& d( Ga.txt  b.txt  c.txt
/ B5 E) r# O. f( \# r; @/ P& a现在要加密当前工作目录的内容(根据文件的大小,这可能需要一点时间)
# N/ }' z0 E  J) ~8 x3 ~5 G7 t[root@ipsan-node03 mnt]# tar -czf - * | openssl enc -e -aes256 -out test.tar.gz, _1 S& X& P& Y# A. `4 S- n
enter aes-256-cbc encryption password:                          //假设这里设置的密码为123456- n8 ^" V' ]7 {. i. I
Verifying - enter aes-256-cbc encryption password:4 j9 `6 r0 a* \: C6 K$ s
上述命令的解释:  L8 s& I6 \% t9 l) ^2 _
enc 使用加密进行编码- {- @* N1 g4 p  b
-e  用来加密输入文件的 enc 命令选项,这里是指前一个 tar 命令的输出% H+ A3 h1 ~4 E" M- i
-aes256 加密用的算法3 \5 ~: ~1 F2 z! Y: a' f1 m! b: z
-out 用于指定输出文件名的 enc 命令选项,这里文件名是test.tar.gz/ B+ @9 _; R/ M1 N
[root@ipsan-node03 mnt]# ls
3 o) H  b# r4 u& ]a.txt  b.txt  c.txt  test.tar.gz
# J" v. j. T! G[root@ipsan-node03 mnt]# rm -rf a.txt 5 a, |, F: ]1 A8 W3 C, S  H
[root@ipsan-node03 mnt]# rm -rf b.txt
" G5 X8 z, p0 }[root@ipsan-node03 mnt]# rm -rf c.txt 6 q- ^# n' ]$ `2 W, K1 C9 q
[root@ipsan-node03 mnt]# ls
1 N7 u' ~- |6 T1 T# ltest.tar.gz7 E* {  ~/ ^4 q
对于上面加密后的tar包直接解压肯定是不行的!9 m2 ~. u& W' o6 Z+ u
[root@ipsan-node03 mnt]# tar -zvxf test.tar.gz * C2 T. s$ E' P9 v, W( q
gzip: stdin: not in gzip format
% F* @7 K& U: y9 D- k, H, J" Itar: Child returned status 1
. _$ H/ ^, k- S* V, V, \  jtar: Error is not recoverable: exiting now
/ u, e5 {$ Y, l$ P7 f8 f' G3 x7 H要解密上述tar归档内容,需要使用以下命令。
; f. o4 c5 W1 }1 @[root@ipsan-node03 mnt]# openssl enc -d -aes256 -in test.tar.gz | tar xz -C /mnt/
, b) F2 M- W6 n( ^enter aes-256-cbc decryption password:
: Z9 g! h$ o% k/ J1 V[root@ipsan-node03 mnt]# ls* R' p# g. Q6 A$ b. O
a.txt  b.txt  c.txt  test.tar.gz' X% K  N9 F( G3 Q
上述命令的解释:0 R' u9 T! M0 A- ?6 A. }# S+ w7 {
-d  用于解密文件, V/ y+ k" Y7 L, _2 V( `  e0 K
-C  将加压后的文件提取到目标目录下9 \" Y, |. ]1 M* Z; Y( X
当你在本地网络或因特网工作的时候,你可以随时通过加密来保护你和他人共享的重要文本或文件,这有助于降低将其暴露给恶意攻击者的风险。
( n( y7 V" ]+ L8 y4 ^1 L0 Q  {& |方法四:shc加密(仅仅对shell脚本加密)
( i& m- g( M5 b  I  j. U/ [1 K1 \shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、1 }* u9 n' J9 v; u( |- z5 _
密码等不希望公开的问题。
+ g4 L( r+ K# g" W/ _+ @
3 j" |; Z* o7 n6 Z如果你的shell脚本包含了敏感的口令或者其它重要信息, 而且你不希望用户通过ps -ef(查看系统每个进程的状态)捕获敏感信息. 你可以& s8 z1 ~  ]3 x( i$ L& E: L
使用shc工具来给shell脚本增加一层额外的安全保护. shc是一个脚本编译工具, 使用RC4加密算法, 它能够把shell程序转换成二进制可执7 x# w- R7 ?4 D0 Q
行文件(支持静态链接和动态链接). 该工具能够很好的支持: 需要加密, 解密, 或者通过命令参数传递口令的环境.% k, B& J1 v2 m! E- {' d3 b9 L
! A% \  X+ q& Z3 c% Y9 }" @4 a8 [
shc的官网下载地址:  ; ]' w# _# D, N, t7 ]9 f7 F$ U9 V2 b0 [
http://www.datsi.fi.upm.es/~frosal/sources/% m/ A0 g* I1 B% Y9 c" _
6 K2 W! u; ?" ]
安装方法:2 B, f8 x9 i/ l/ I8 G
[root@ipsan-node03 ~]# cd /usr/local/src/3 J1 l  G: U- ~" I/ f5 G/ j. ^2 f" {
[root@ipsan-node03 src]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
1 p, @7 [( ^% i7 R1 i( P% H[root@ipsan-node03 src]# tar -zvxf shc-3.8.9.tgz
( j! @  \; ?$ f7 y; h4 O[root@ipsan-node03 src]# cd shc-3.8.95 x, j5 c0 j3 y7 b; w! `
[root@ipsan-node03 shc-3.8.9]# mkdir -p /usr/local/man/man18 N; \9 n$ O4 W; \; |* ^% Q+ x" {1 E
这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下;
7 `) K* K- j+ Y6 J将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装4 t7 x9 Y; L$ X0 N

( A( j+ C. m9 m& p# L& @: F[root@ipsan-node03 shc-3.8.9]# make install# M1 D' S$ \  i+ c9 v
这是要回答yes或者y,不能直接回车,否则会报错5 ^) P2 |0 V! L

" E5 s$ R( n& T% W* `) j2 l0 n需要注意的是,sch只能能shell脚本文件进行加密,其他文件都不可以!4 M' z4 w2 Q! f5 a0 Z8 @
2 K# f7 a3 A/ H1 {- s0 `3 r5 J
sch加密使用方法:
  v* v5 b" X6 m- z, m% H- _"-f"选项指定需要加密的程序
# _. n* Y: S2 y% [  Z[root@ipsan-node03 ~]# ls
% Q$ }: `) ]; |  ?9 _text.sh" A1 O( P" P3 _' |7 f; D1 D5 A
[root@ipsan-node03 ~]# cat text.sh
' M5 I4 p( q2 C+ V#!/bin/bash
& _6 c% I0 X& ]! U# w  _echo "hahaha"% n$ H  G! h2 n; E# O9 c+ ^; y
[root@ipsan-node03 ~]# shc -r -f text.sh, n/ u0 s5 i! f& D6 p0 S8 u
[root@ipsan-node03 ~]# ls6 }1 b# h8 z9 ?" d" a
text.sh  text.sh.x  text.sh.x.c3 z) m2 }# x; H: U. u

6 ?- z* W9 @6 f& f* Y注意:要有-r选项, -f 后跟要加密的脚本名。( w: C2 P8 {& G. F
运行后会生成两个文件,script-name.x 和 script-name.x.c
0 r4 I6 P6 x' ~. ^% h: {) P  Gscript-name.x是加密后的可执行的二进制文件.2 H* `7 c. z. Q2 x* h+ E- ?
./script-name.x 即可运行.
4 `8 P* }  }  h/ V4 d" fscript-name.x.c是生成script-name.x的原文件(c语言)
# r4 }. \& m1 ][root@ipsan-node03 ~]# ./text.sh& Q5 b5 v) f+ w( x4 ^! t
hahaha
; b  z. s2 t, l, t$ C* _% g" [[root@ipsan-node03 ~]# ./text.sh.x
0 o& X4 o  q* ~- B; \& {+ Phahaha, n5 }" N6 I8 s9 \  Y- d

# A- D. m# i' j) L  o9 q9 O5 B* k4 t通常从安全角度考虑:/ U& e7 y8 Y; X2 y
使用sch命令对shell脚本文件进行加密后,只需保留.x的二进制文件即可,其他两个文件均可以删除!
0 ~5 f" y# |6 N3 K5 p[root@ipsan-node03 ~]# ls+ M/ x* \) f7 F3 E5 j
text.sh  text.sh.x  text.sh.x.c+ u# O& T3 g  @  c/ |
[root@ipsan-node03 ~]# rm -rf text.sh" s. Z" y" x6 g
[root@ipsan-node03 ~]# rm -rf text.sh.x.c
. z; h+ U+ a4 V- ^  c. v- V( b[root@ipsan-node03 ~]# ls
5 y* P5 o8 H8 V& g7 B" Atext.sh.x" C# u. k  k1 s% Z1 C
[root@ipsan-node03 ~]# ./text.sh.x
) Y& |4 h* T0 }hahaha0 v5 g% v2 b- ]2 [2 D' W% o
; M. x& d& `# T' H, }& e
另外:
1 s0 b) l! c9 i5 B* `3 Nshc还提供了一种设定有效执行期限的方法,可以首先使用shc将shell程序转化为二进制,并加上过期时间,如:
1 s2 T5 j9 I4 V. x, b" _, p4 T' N* b9 ]! B[root@ipsan-node03 ~]# shc -e 28/02/2018 -m "this script file is about to expire" -v -r -f text.sh
# u' H" {) u# u3 Pshc shll=bash1 c9 g1 W& z! d3 |% Q
shc [-i]=-c
& R2 i, i  N  J+ X0 y, J: B: [shc [-x]=exec '%s' "$@"
3 c2 G! W  f' V5 ?shc [-l]=; k- ]1 F, F. g# Y# i" D2 A- ~, A: X
shc opts=
* }: `; f  z+ a) h5 oshc: cc  text.sh.x.c -o text.sh.x
% |4 u* g- }* N, E" u+ \shc: strip text.sh.x' N' M0 @3 T2 K1 C  F: }* d
shc: chmod go-r text.sh.x
! u; i3 f  V$ F( S[root@ipsan-node03 ~]# ls$ v4 u) A7 O6 C" d5 i
text.sh  text.sh.x  text.sh.x.c) B% }& k$ w$ c2 m8 u" F

% J' y' J7 m# ]7 C解释:0 v1 R0 H' l; Z- M7 r
-e:指定过期时间为2018年2月28日1 t' R1 N: g% e+ a# q
-m:过期后打印出的信息;" C6 W9 P8 v1 J# H5 ~* J6 U
-v: verbose
5 e8 e, b8 L3 m7 v$ c-r: 可在相同操作系统的不同主机上执行
* S" D2 L/ i1 x$ b' H% N9 R-f: 指定源shell/ N3 V) I, r8 p1 u+ \: P( m

+ h2 a' c" S7 i+ \5 T如果在过期后执行,则会有如下提示:
. D+ o4 N8 @/ v, D, B/ ~1 V( [1 D[root@ipsan-node03 ~]# ./text.sh.x: t& u# G% e1 U/ T+ Q2 @
./text.sh.x: this script file is about to expire8 v6 ?  M1 d! q) I# f
使用以上方法要注意,需防止用户更改系统时间,可以通过在程序中加入自动更新系统时间的命令来解决此问题!!
& c5 M# T- Y5 ]8 b2 `   Y  f: v$ ?/ T, o8 U) `# A( _
sch的帮助命令:
- @/ g; u* M1 |1 p; P; [; o. {4 E7 C[root@ipsan-node03 ~]# shc -help
( q8 v+ ?9 m& n, F& dshc Version 3.8.9, Generic Script Compiler+ Y8 w4 S8 s; N" J) q. l
shc Copyright (c) 1994-2012 Francisco Rosales <frosal@fi.upm.es>5 X* f: h& H- C) H1 j8 e5 I& q# I
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
3 d$ ^1 B- ]/ ]$ g $ Q& ]* ]) d6 w! Q- o% B
    -e %s  Expiration date in dd/mm/yyyy format [none]   (指定过期日期)
9 o4 W6 _- {  ~2 N    -m %s  Message to display upon expiration ["Please contact your provider"]  (指定过期提示的信息)
8 i4 w+ k- R' X) H    -f %s  File name of the script to compile   (指定要编译的shell的路径及文件名)6 }6 s( u( G6 r, p
    -i %s  Inline option for the shell interpreter i.e: -e1 b* V9 V& m+ \( m: J2 n& H
    -x %s  eXec command, as a printf format i.e: exec('%s',@ARGV);8 c# O* D. T+ c+ e. n% D
    -l %s  Last shell option i.e: --  \& t8 k0 }% y7 \+ q
    -r     Relax security. Make a redistributable binary   (可以相同操作系统的不同系统中执行)0 V* N0 F7 G& r# Y# Y/ y
    -v     Verbose compilation    (编译的详细情况)" ?& d" h, M; d6 |
    -D     Switch ON debug exec calls [OFF]
: O+ f+ _& I4 A0 t, F7 C    -T     Allow binary to be traceable [no]& {3 g( l, E5 [9 U
    -C     Display license and exit: w4 b' @9 t: V8 b! _4 g
    -A     Display abstract and exit
) z. f$ p9 @6 p1 m9 c    -h     Display help and exit# s9 z# x( O0 O% N$ o& i

$ t) _- u9 O" x+ D    Environment variables used:1 D/ _, [# a" j2 W7 _$ |
    Name    Default  Usage
, j6 e* k' M9 o. [4 t    CC      cc       C compiler command$ P- c, }! e; A6 p; x( M# Z! b  i
    CFLAGS  <none>   C compiler flags0 O& v; k( D; ^1 R) |

# m- i9 P/ ?1 Z# @9 K5 \. B6 U    Please consult the shc(1) man page.
! s- a3 U. S' C5 R' `* }9 K9 S ( u2 t' b" u! t% Z4 e
说明:
* v& u" p- l) s! ?( r: S经测试,相同在操作系统,shc后的可执行二进制文件直接可以移植运行,但不同操作系统可能会出现问题,
: Y# w7 j/ P  V6 z. t比如将上面的test.sh.x的二进制文件在CentOS6.9上加密后移到redhat as5u4上不能运行,出现"Floating point exception"错误提示,
5 X  Y& o1 a) j但移到另一台CentOS6.9上直接运行没问题。
& ?' ]1 W3 u3 ^" O# e方法五: ZIP加密! C) A* }! _8 Q1 \4 t+ v
1)文件加密: t/ w9 h7 e1 h+ Z) K! H: W
使用命令"zip -e filename.zip filename" 即可出现输入密码的提示,输入2次密码。 此文件即被加密解压时候是需要密码的
/ c0 U6 d5 b! \1 a4 ]( I- P5 P下面开始为test.txt文件进行加密' M: S" c4 q0 O) ^7 Z2 C) j4 s
[root@centos6-vm02 ~]# cat test.txt 3 s9 D- @, d8 P
this is a test!!!
3 x2 B: W7 k  }: A2 Q& x% \[root@centos6-vm02 ~]# zip -e test.txt.zip test.txt         //如下进行加密操作时,需要输入两次密码6 A4 m8 k0 V4 p% x; p" q) V2 c
Enter password:                           
4 q1 W- S7 h3 n; IVerify password: # x! g: x5 o. Q. L& e3 q
  adding: test.txt (stored 0%)1 t- R9 V4 |# F% l( C- f3 o
[root@centos6-vm02 ~]# ls
: h, I6 q' [3 p1 A/ vtest.txt  test.txt.zip
; K! ^5 F! ]2 ]: ]进行解压的时候,需要输入密码
' W  y) ^$ Z  u9 a, i8 O$ M* N[root@centos6-vm02 ~]# rm -f test.txt5 h  r' X# Q9 l: R" ~
[root@centos6-vm02 ~]# unzip test.txt.zip " c) a2 X1 q& v2 t2 ~: r+ w
Archive:  test.txt.zip
& f. C, R4 ?' ?2 ]7 e/ R( v6 I) h: W[test.txt.zip] test.txt password:
! K2 u  d% x+ | extracting: test.txt               
/ p8 M& c. W7 J0 ?' s7 x[root@centos6-vm02 ~]# cat test.txt) F% t) E5 j# |) O
this is a test!!!
4 y! G+ Y0 g) a) m, ~2)文件夹加密# O; G4 \- J9 i! U
使用命令"zip -re dirname.zip dirname"即可出现输入密码的提示,输入2次密码。 此文件即被加密解压时候是需要密码的。7 x. n! X+ D, I) o6 T+ C& n
下面开始对目录进行加密$ z% c7 \" m  F! X* B
[root@centos6-vm02 ~]# mkdir dirtest
! h4 Q& H* C- j[root@centos6-vm02 ~]# cat dirtest/haha.txt
/ W; o; S7 M& d  jthis is test of dir!!!* I4 U# [( f( J
[root@centos6-vm02 ~]# zip -re dirtest.zip dirtest
, L  J; ~6 J- x5 w  {- vEnter password:
  r- G3 F3 }& q% c' Q6 j- qVerify password: . \1 y% E% i1 e: X2 {0 [7 G& r; Q
  adding: dirtest/ (stored 0%)
6 [% B" M& Y; I( V  adding: dirtest/haha.txt (stored 0%)& N% Y7 o# y) R$ s8 n
解压目录时需要输入密码
+ F3 }, X: A! E) l" }[root@centos6-vm02 ~]# rm -rf dirtest: l- C& q# n( }" Y- i+ I9 h* X
[root@centos6-vm02 ~]# unzip dirtest.zip $ `! j/ W+ O- T: r; w
Archive:  dirtest.zip4 h) ^/ e3 [' {0 ]+ E
   creating: dirtest/$ f$ P' ~  Q* w/ A, |/ u
[dirtest.zip] dirtest/haha.txt password:
0 c% p9 L. S- W, [0 y extracting: dirtest/haha.txt        3 T6 l; V" H, t' Q6 Y
[root@centos6-vm02 ~]# ls dirtest$ x' p, o  R! C$ k5 T  l+ P6 U, b
haha.txt
$ ~4 H' x& T/ V4 L& Y[root@centos6-vm02 ~]# cat dirtest/haha.txt
; `8 }( R& Y) Ithis is test of dir!!!4 p; h9 E2 S; N+ O
方法六:GnuPG加密9 f- x' a; s' r+ \5 {" h7 A
GnuPG的全称是GNU隐私保护(GNU Privacy Guard),常常被称为GPG,它结合了一组加密软件。它是由GNU项目用C编程语言编写的。最新的稳定版本是2.0.27。在如今的大多数Linux发行版中,gnupg程序包都是默认随带的,所以万一它没有安装,你可以使用apt或yum从软件库来安装它(yum install gnupg)。注意:gpg只能对文件进行加密,对目录则无法完成加密!, s9 ~' h& G0 f+ k
下面开始使用GnuPG方式对test.txt文件进行加密. h' {! `4 O2 ~- X9 E& |' y5 s$ z
[root@centos6-vm02 ~]# cat test.txt
; E% B7 A- m- Z$ ~) Ithis is a test!!!
  z# d% [5 c/ u8 r# ]' u1 ~+ o[root@centos6-vm02 ~]# gpg -c test.txt   
5 G4 x( G7 ]" Tcan't connect to `/root/.gnupg/S.gpg-agent': No such file or directory         //这个信息可以忽略
' Z; n2 z" Z* R注意:如上加密的时候,会弹出来一个对话框,要求Paraphrase输入两次密码,对这个特定的文件进行加密。
+ D3 ^7 d8 i0 M一旦运行带-c选项(完全使用对称密码算法加密)的gpc命令,它会生成一个文件.gpg文件。
! J4 l1 }/ L) i. v6 v( F[root@centos6-vm02 ~]# ll test.txt*3 |* }! z' B5 b
-rw-r--r--. 1 root root 18 Jan  4 10:08 test.txt
( L4 n+ n# q* f. N0 Y$ t-rw-r--r--. 1 root root 61 Jan  4 10:04 test.txt.gpg
  X; x* }$ N, B  }- m$ ?9 Y+ t7 P& }对文件进行加密后,最好将源文件删除!不要再保留源文件了!" t6 Z" _( f6 U; |1 p& |
[root@centos6-vm02 ~]# rm -f test.txt1 p. ]/ c* L! x: a9 z, X
文件解密操作。
6 k7 m& [; `$ z# r5 s  l& }; C* _( F注意出现Paraphrase提示时,需要提供加密时输入的同一个密码才能解密- r& g. E: Y( s* m9 C2 B
[root@centos6-vm02 ~]# gpg test.txt.gpg   , S1 U  z& F5 k
gpg: 3DES encrypted data
. {. q# D7 N- _+ P* rcan't connect to `/root/.gnupg/S.gpg-agent': No such file or directory3 D& u# Z* v8 Q
gpg: encrypted with 1 passphrase
% h7 v( t" W; T6 U9 b' Z8 s1 Egpg: WARNING: message was not integrity protected
- o; D, O. `; T/ U- E7 m[root@centos6-vm02 ~]# ll test.txt*: l% m) _6 ?& g8 w7 Q9 j% X3 l
-rw-r--r--. 1 root root 18 Jan  4 10:08 test.txt
, _+ h. ?% B5 S( V, W* s0 ]-rw-r--r--. 1 root root 61 Jan  4 10:04 test.txt.gpg
$ q6 @& o  A  t; J% M[root@centos6-vm02 ~]# cat test.txt8 D: D" X* s+ }7 @( o) L. g& z
this is a test!!!
; \  G# c8 g6 ~( x$ W; n二、对字符串进行加密/解密方法
# `+ @3 _1 ~" q) {! TLinux系统下自带的工具base64可以对字符串进行加密和解决,一般是从标准输入读取文件内容,base64编码并打印到标准输出!, S9 v, F/ y) k  H8 H1 [; Y
使用"base64"或"base64 -i"命令进行字符串加密操作% E& |" [2 D& `, s( T- H: E! L
使用"base64 -d"命令进行字符串加密后的解密操作' b( r: J/ r+ u7 Z, h1 s
如下对字符串"wang@123"进行加密操作:- P) ?2 ?* c& W! w
[root@ss-server ~]# echo "wang@123"|base647 c; }$ W  F; n! Z4 b8 z/ Y/ I9 r9 k
d2FuZ0AxMjMK4 ]7 {' t/ D! R8 b- e
[root@ss-server ~]# echo "wang@123"|base64 -i
1 b4 D* Z+ p+ _& Nd2FuZ0AxMjMK: M: Y! {# u/ s& C/ b6 l; Y6 Q1 v
对上面加密后的字符串进行解密操作) j0 t; r7 K9 G" W: j0 C; \
[root@ss-server ~]# echo "d2FuZ0AxMjMK"|base64 -d% r/ {( E2 X2 h% u( M6 W; U  X
wang@123
9 |8 H# w6 _) B& ~, C. W8 D[root@ss-server ~]# echo "wang@123"|base64 -i|base64 -d
/ W) v# o6 M" _/ f$ h: }2 ?wang@123! f+ E  Y' \, w) s+ e
比如,有时为了安全考虑,需要隐藏tomcat版本,这时可以选择将tomcat版本进行加密
" ?, O8 J) C& \; Q- o- V首先查看tomcat版本(在RELEASE-NOTES文件中)
9 P" n. ~' v2 V& {: w[root@ss-server ~]# vim /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES
# a  j1 F) J$ u! a0 {........8 Y, A7 n. Z8 b* L; d
........6 s/ j1 o6 _+ O+ r4 i# S
                     Apache Tomcat Version 8.5.435 I+ M. c5 S& J; V: G: S
                            Release Notes7 N6 }' N; Y( ~6 _- j
获取tomcat版本号
- V# J, H# g. T[root@ss-server ~]# cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'! G. E4 N, n5 g, J# E. W/ J3 s1 r; l
8.5.43
& }. i6 d) j- q7 z: {6 Z将tomcat版本号加密7 M3 j/ c! A3 x& f5 s
[root@ss-server ~]# cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'|base64 -i0 e1 r* r) K0 B
OC41LjQzCg==
* |$ E- \8 f/ l# C替换tomcat版本号为加密字符串
: p/ t) F- }" g1 b' Z8 }[root@ss-server ~]# TOMCAT_VERSION_OLD=$(cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}')
# q# v( ?: |9 t' z% |" u[root@ss-server ~]# TOMCAT_VERSION_NEW=$(cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'|base64 -i)9 L$ s* ^2 M- u0 N: B4 t0 W& ^
[root@ss-server ~]# sed -i 's/${TOMCAT_VERSION_OLD}/${TOMCAT_VERSION_NEW}/g' /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES" Z% P5 L% x% h' o3 X
查看替换后的tomcat版本号, J  o( u5 m1 N; j7 L0 h* Q
[root@ss-server ~]# cat /opt/daiwy/tomcat_8081_wedai/RELEASE-NOTES|grep -w "Tomcat Version"|awk '{print $4}'
" F+ f& J7 H# m0 |OC41LjQzCg==
+ A' Z( Q2 D  Q* M& W/ ~===================================================================================/ z' N9 \2 i: G
需要注意:
0 o" {# u! o) I( u9 y# b! ilinux系统自带的base64工具有BUG,base64解码有时会莫名出现报错:base64: invalid input。6 k7 j/ C' S4 g. z7 A
所以最好还是使用源码包编译安装base64:
3 `8 R8 F6 \0 |- r[root@ss-server ~]# wget http://www.fourmilab.ch/webtools/base64/base64-1.5.tar.gz
4 ^0 \6 F( v" l* k! R) y[root@ss-server ~]# tar zxf base64-1.5.tar.gz  ?4 {3 h+ w* @
[root@ss-server ~]# cd base64-1.5: M3 M3 X6 n9 V- }! X  k
[root@ss-server base64-1.5]# ./configure& s/ u: r6 f8 h% _0 X* i: G; F
[root@ss-server base64-1.5]# make && make -n install
6 j* i3 a# }: m3 A/ h# [9 x, z[root@ss-server base64-1.5]# echo "wang@123" | ./base64 -i" `- k) M# n5 O, S
d2FuZ0AxMjMK
; R4 ^# w) g# e[root@ss-server base64-1.5]# echo "wang@123" | ./base64 -i| ./base64 -d
7 G/ B  ~- a" ^6 r# `# mwang@123$ U. y' C+ h+ X$ W3 q( ]4 Z9 h8 Z

( b7 K7 \+ i1 b$ r

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-7-9 10:18:52 | 显示全部楼层
一、对文件进行加密/解密方法
/ n% `; P' W( A* G1 m, F& X# M% x6 z# r
方法一:gzexe加密7 }$ f) b3 E2 a/ f
这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。示例如下:! X& K3 e% p0 o" _

" v4 n3 I" V+ Y[root@ipsan-node03 ~]# echo "hahahaha" > a.txt; b( r, \- v# s) G
[root@ipsan-node03 ~]# cat a.txt
, u" X8 z5 r  X: D- h& Khahahaha
1 I: t6 q1 h' U9 }" l[root@ipsan-node03 ~]# ls a.txt / h! ]: n, F/ d% y
a.txt
0 r. K- |% k& @2 Y6 ?" w[root@ipsan-node03 ~]# gzexe a.txt+ |8 d6 ~* U6 A( ^
a.txt:    22.2%3 ]) W! E. i$ t
[root@ipsan-node03 ~]# ls* P% T& w) T( C1 }# e
a.txt  a.txt~  : k. B% C3 v) I4 H; j1 K

# T0 Z. i$ Q) X9 k) Ggzexe方法会把原来没有加密的文件a.txt备份为a.txt~ ,同时a.txt文件变成了加密文件(即变成了密文)! k6 B  _( O, K9 i" A9 y! L; T
[root@ipsan-node03 ~]# cat a.txt                                                                                          
6 z+ t% T) M7 b! g
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:57 , Processed in 0.025005 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表