压缩与解压缩
字符集是一种约定
在计算机中,所有的文件都以二进制的形态存在。我们的文字根据一些约定,来表示特定的符号。
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
1 |
|
-o 直接覆盖原文件
-P 指定压缩密码
test.zip 指定压缩后文件名
test.txt 是要压缩的文件
gz
gzip 参数 文件名
1 |
|
bzip2 是gzip的升级版,选项和上面一样。
xz是bzip2的升级版,虽然说是升级版,但它们其实并没有什么关系啊,只是说压缩性能更加好而已。不过压缩能力越好,往往要花费更多的时间来压缩,所以性能时间自己权衡吧!
gz解压缩
gunzip xx.gz
tar
在文件传输中,我们还要介绍一个指令tar。就像现实中要寄快递需要将你的文件打包一样,网络传输也需要打包一下。免得文件丢失或者遗忘。
1 |
|
范例:
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自带的命令行程序。
1 |
|