压缩与解压缩

## 字符集是一种约定
在计算机中,所有的文件都以二进制的形态存在。我们的文字根据一些约定,来表示特定的符号。
> **ASCII**
美国信息交换标准码(128个代码,用8bit代表一个代码,当然是不能表示中文的咯)
> > **Unicode**
对ASCII的扩展(用16bit代表一个代码,解决了上百种语言的混乱) > >
**UTF-8**
是对Unicode的升级版,为了解决16bit占用地址的问题。有些字符只需要用8bit表示,如果全部都用16bit表示,岂不是浪费了一倍的空间?所以UTF-8是可变长度的,能用8bit就不用16bit。
由于在网络上传输数据,文件越小传输越快,和UTF-8类似,我们可以把一些重复的数据用简便的方法表示。
例如 111111111100000000 表示成 10180(10个1,8个0)
虽然例子不太严谨,反正压缩就是用更简便的方式表示数据,只要接受的另一端用同样的方式将数据还原,就可以了。
## 常见压缩方法 下面看看linux支持的压缩方法。 ``` zip -P 123456
test.zip test.txt 加密test.txt unzip -P 123456 -o test.zip 解密test.zip
``` > -o 直接覆盖原文件 > > -P 指定压缩密码 > > test.zip
指定压缩后文件名 > > test.txt 是要压缩的文件 ``` gzip 参数 文件名
``` > -c 相当于cat命令吧?将压缩的文件输出到屏幕上 > -d
我以魔法小樱的名义命令你,解压缩! > -t 检验文件有无压缩错误 > -v
显示文件压缩比等信息 > -number
number是个可选项从1到9,数字越大压缩越慢,但压缩地比较多。如果不设置该选项,默认是6。
bzip2 是gzip的升级版,选项和上面一样。 >
xz是bzip2的升级版,虽然说是升级版,但它们其实并没有什么关系啊,只是说压缩性能更加好而已。不过压缩能力越好,往往要花费更多的时间来压缩,所以性能时间自己权衡吧!
在文件传输中,我们还要介绍一个指令tar。就像现实中要寄快递需要将你的文件打包一样,网络传输也需要打包一下。免得文件丢失或者遗忘。
> -c 打包! > > -z 使用gzip,或者 -j 使用bzip2,-J 使用xz > > -v
显示命令执行过程 > > -f 指定归档文件名 > > -t 查看文档 > > -x
解压缩! > ## 范例: > > tar -jcv -f app.tar.bz2 使用bzip2
压缩app.tar.bz2 的文件 > > tar -jtv -f xx.tar.bz2 使用bzip2
查看xx.tar.bz2有哪些文档名 > > tar -zxvf xx.tar.gz
使用gzip解压缩xx.tar.gz、输出命令执行过程。 > > tar -cvf haha.tar
shell/ 将shell目录已经目录下的文件打包成文件haha.tar ## 程序加密
加壳与脱壳:由于压缩后的数据不可以识别,所以病毒木马也十分喜欢压缩呢。有个专有的名词叫做加壳,十分形象。总之就是用来保护程序的。
压缩壳有UPX、ASPack、PECompact
有些壳除了压缩,还有加密功能,例如ASProtect、Armadillo ##
暴力破解压缩密码 类似的软件有很多,这里推荐一个常kali自带的命令行程序。
``` fcrackzip -h 查看帮助 fcrackzip -D -p /root/Desktop/test.txt
xx.zip 使用指定的密码字典,破解xx.zip ```
[常用密码下载地址:https://wiki.skullsecurity.org/Passwords\](https://wiki.skullsecurity.org/Passwords)