ZIP格式分析
最近遇到一道CTF题是和zip格式编码相关的,正好我一直以来就对各文件格式编码没有一个系统的认知,就趁这个机会好好学习一下。
简介
ZIP文件格式是一种数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为application/zip。当前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7z格式。从性能上比较,RAR及7z格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。Microsoft从Windows ME操作系统开始内置对zip格式的支持,即使用户的计算机上没有安装解压缩软件,也能打开和制作zip格式的压缩文件,OS X和流行的Linux操作系统也对zip格式提供了类似的支持。因此如果在网络上传播和分发文件,zip格式往往是最常用的选择。
官方文档如果想要准确系统的了解整个zip格式,最好还是查看官方文档,链接如下:
.ZIP File Format Specification ...
hexo博客的备份与恢复
为了防止误操作或计算机崩溃导致的博客源文件丢失,或满足我们更换电脑进行写作的需求,定期进行备份与恢复就显得很重要了。
备份需备份的文件目录我们在进行备份时,并不需要将整个博客目录全部备份,只备份以下几个用户自定义的即可:scaffolds目录,source目录,themes目录,.gitignore文件,_config.yml文件,package.json文件,其他都是通用的。
首先我们先来观察整个博客目录的结构:
.deploy_git 本目录会在我们部署时生成,也就是github上保存的文件,无需备份。
node_modules 本目录包含了hexo博客依赖的模块,安装时自动生成,无需备份。
public 与.deploy_git类似,是编译后生成的文件静态网页文件,无需备份。
scaffolds 保存了用户文章的模板,需要备份。
source 保存了用户文章的源文件,需要备份。
themes 保存了用户下载的主题文件与配置,需要备份。
.gitignore 保存了推送到github时忽略的文件名,需要备份。
_conf ...
Crypto基础
密码学是研究编制密码和破译密码的技术科学,本文将主要介绍密码学中常见的几种加密方式的原理以及实际的应用,并以攻防世界新手练习区例题为例进行分析。
Base64
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
加密原理Base64中的64表示64个可打印的字符(具体范围如下表所示),而要完全表示64个不同的字符至少需要6位二进制数(2^6=64),我们知道一个字符类型数据在计算机中占用1Byte的存储空间,而1Byte为8bit,即一个字符实际在计算机中存储的是一个8位二进制数。
Base64加密的实质是将每三个8bit字节转换为四个6bit字节(8*3=4*6),再在6bit字节的高位添0以补全为8位,最终转换为四个8bit字节,完成加密。例如:字符串s13,对应的ascii码为115 49 51,转换为二进制:01110011 00110001 001100 ...
CSharp事件和委托
委托与事件在开发中的应用非常广泛,本文将简单介绍C#中委托和事件的定义、使用方法,以及它们之间的区别和联系。
委托C#中的委托(delegate)类似于C/C++中的函数指针,是一种存在对某个方法的引用的引用类型变量,所有的委托都派生自System.Delegate类。
委托的声明声明委托的语法如下:
delegate <return type> <delegate name> <parameter list>
比方说,我要声明一个无返回值,无参数的委托。
public delegate void MyDelegate();
在声明了委托类型后,必须将其实例化才能生效,可以使用new关键字创建并传入参数(参数为一个特定的方法名)。
MyDelegate myDelegate = new MyDelegate(Func1);
以上实例中我们实例化了一个带有Func1方法引用的MyDelegate类型变量,并将其赋值给了myDlegate实例。
委托的调用如果想让委托调用它所引用的方法,可以直接仿照方法调用的写法。
myDelegate();
多播委托其实一个 ...
文件路径的表示方法
文件路径作为计算机基础内容,在很多时候都扮演着十分重要的角色,例如控制台命令、资源文件的存放等等,以下将介绍计算机文件路径的表示方法以及一些常见的使用场景。
文件路径的表示分为两种方式:绝对路径表示法和相对路径表示法。
绝对路径与相对路径的区别绝对路径的表示绝对路径顾名思义就是文件在硬盘上存储的真正路径,它不会被更改,除非文件在硬盘中的位置发生改变。绝对路径表示格式为:“<硬盘符>\<目录1>\<目录2>…\<文件名>”,例如test.txt文件存储在C盘cat1下的cat2的cat3中,它用绝对路径表示为C:\cat1\cat2\test.txt。
相对路径的表示相对路径表示从当前文件位置出发,指向目标文件的路径,它是目标文件与当前文件的相对位置,会随着当前文件位置的不同而使与同一文件的相对位置发生改变。相对路径的表示格式为:“./<目录1>/<目录2>…/<文件名>”(这里的“./”可以省略),例如当前HTML文件root.html位于C盘根目录下,text.txt文件存储在C盘cat1文件夹下 ...
让批处理文件中的中文正常显示
最近在学习DOS命令和批处理相关内容的时候,遇到了点问题,就是在执行包含中文的批处理文件时,中文无法正常显示,在查阅了相关资料之后,了解了一些编码相关的内容。
原因编码相关的那些事现在主要的两种编码格式为UTF-8和ANSI。
ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xffff来编码,即扩展的ASCII编码。
为了应对不同国家和地区的使用,ANSI编码存在很多不同的标准:由于汉字的种类非常多,而一个字节(Byte)最多只能表示2^8 = 256种文字与符号,这肯定是远远不够的。因此在中国、日本、韩国等采用象形字符的地区,通常采用双字节字符集的方式来表示文字符号,即采用两个字节来表示一个字符。在简体中文系统下采用的是GBK标准,比如汉字“字”就使用[0xd7,0xd6]两个字节进行存储。系统会根据计算机语言来确定ANSI的标准,当然也可用手动更改。
UTF-8(8位元,Universal Character Set/Unicode Transformation Forma ...
开始写个人博客了
博客搭建经过两天的折腾,利用Hexo框架和github托管的方式搭建的静态博客也算有了个雏形,这两天将继续对其进行美化以及添加新功能,今后打算在这里不定期分享一些自己感兴趣的编程、数码、游戏相关的内容。
搭建博客的目的一方面是想锻炼自己的表达能力(我在这方面确实有所欠缺),另一方面也是想将自己感兴趣的内容分享出去,既加深了自己对知识的理解,也能让他人学到新东西。
博客的内容包含但不限于编程、游戏、数码相关内容,只要是我觉得有分享价值的东西,都有可能出现在博文中。