推荐一种基于HashMap识别文件类型的方法与流程

如下介绍的推荐一种基于HashMap识别文件类型的方法与流程,接下来是我给大家带来的。


本发明涉及网络通讯
技术领域
,特别是一种基于hashmap识别文件类型的方法。
背景技术
:目前,识别文件类型可以通过:1、根据常见ascii字符串识别,如(“<html>”,“#!/bin/sh”)。2、对于没有此字符串特征的识别使用“幻数”,指定是通过搜索文件头含有某种文件类型的特殊标签值来判断,如ms-dos采用“mz”,java的.class文件“0xcafebase”,rar5的“0x526172211a0701”,通过此来识别。但是别有意者可能通过组合文件来使识别失败。如使用了前面填充“html”类型,后面放置真正的压缩包,使文件识别失败。现有技术中如果按顺序逐个字符比对,将特别耗时。为解决此问题,本发明提供了一种基于hashmap识别文件类型的方法。专业术语:文件指针:待检测文件打开后数据放入内存中的位置。特殊标签值:属于每种文件类型的一串不定长大小的数据。技术实现要素:为克服上述问题,本发明的目的是提供一种基于hashmap识别文件类型的方法,能快速识别文件类型,且识别准确率高。本发明采用以下方案实现:一种基于hashmap识别文件类型的方法,所述方法包括创建hashmap阶段和寻找文件类型阶段:所述创建hashmap阶段为:预先设定已知的文件类型,遍历n个的文件类型进行操作,即根据文件类型的特殊标签值的前2字节计算hash值,并将各个文件类型对应得到的hash值、第n个文件类型形成一个hashmap表;所述寻找文件类型阶段为:程序运行时,判断文件指针指向文件开头位置是否为初始值,是,则指针后移,不是则计算待检测文件指针前2字节的hash值并查找hashmap表中是否存在,若未发现存在,指针后移,进行计算指针后移的2个字节的hash值进行比对,直至找到为止,若发现存在,则比对待检测文件当前指针指向数据与hashmap表对应的文件类型的特殊标签值是否完全相同,若相同,即能确认文件类型。进一步的,所述创建hashmap阶段进一步具体为:创建hash数组和prev数组,两数组初始化填充0xff;程序运行期间,遍历预先设定已知的文件类型,将第1个文件类型到第n个文件类型都进行处理:即根据第n种文件类型特殊标签值的前2字节计算得hash值v,将hash数组位于v的值更换为n,并将原来的值存储到prev[n],如此循环构建一个以hash数组和prev数组的hashmap表。进一步的,所述hash数组大小必须大于等于最大hash值,所述prev数组大小必须大于等于文件类型数。进一步的,所述寻找文件类型阶段进一步包括如下步骤:步骤1、指定待检测文件,打开文件获得文件指针,此时文件指针指向文件开头位置;步骤2、判断文件指针是否处于文件最后1字节,是,则结束流程,否,则进入步骤3;步骤3、计算文件指针指向前2字节的hash值v,将hash值v到hashmap表中查找,即n=hash[v],找到hash值对应的文件类型;步骤4、判断n是不是初始值0xff,是,则表示此时并没有找到符合存在类型,文件指针向后移动1字节进入步骤2继续查找,否,则进入步骤5;步骤5、得到第n种文件类型的特殊标签值,与文件指针指向的数据进行比较,如果不相符的话,计算n=prev[n],进入步骤4;否则即为识别到文件。本发明的有益效果在于:1、本发明有利于追踪部分伪装文件,伪装文件为:表现为文件前面填充异常字符,而后续才填充正常的二进制信息,识别准确率高;2、可以提高识别速度,比较与逐个字符识别利用hashmap速度快指数倍,效率高。附图说明图1是本发明的方法流程示意图。图2是本发明的创建hashmap流程示意图。图3是本发明的识别文件类型流程示意图。图4是本发明一实施例中文件首位置示意图。图5是本发明一实施例中文件zip信息位置示意图。具体实施方式下面结合附图对本发明做进一步说明。请参阅图1所示,本发明的一种基于hashmap识别文件类型的方法,所述方法包括创建hashmap阶段和寻找文件类型阶段:所述创建hashmap阶段为:预先设定已知的文件类型,遍历n个的文件类型进行操作,即根据文件类型的特殊标签值的前2字节计算hash值,并将各个文件类型对应得到的hash值、第n个文件类型形成一个hashmap表;所述寻找文件类型阶段为:程序运行时,判断文件指针指向文件开头位置是否为初始值,是,则指针后移,不是则计算待检测文件指针前2字节的hash值并查找hashmap表中是否存在,若未发现存在,指针后移,进行计算指针后移的2个字节的hash值进行比对,直至找到为止,若发现存在,则比对待检测文件当前指针指向数据与hashmap表对应的文件类型的特殊标签值是否完全相同,若相同,即能确认文件类型。本发明涉及结构:hashmap表、构建hashmap程序、查找文件类型程序。如图2所示,所述创建hashmap阶段进一步具体为:创建hash数组和prev数组,两数组初始化填充0xff;所述hash数组大小必须大于等于最大hash值,所述prev数组大小必须大于等于文件类型数。程序运行期间,遍历预先设定已知的文件类型,将第1个文件类型到第n个文件类型都进行处理:即根据第n种文件类型特殊标签值的前2字节计算得hash值v,将hash数组位于v的值更换为n,并将原来的值存储到prev[n],(也就是说此处v是前2字节计算得的hash值。hash[v]=n表示hash数组位于v的位置替换为n,并将hash数组位于v的值存储到prev[n])如此循环构建一个以hash数组和prev数组的hashmap表。即hash数组prev数组如图3所示,所述寻找文件类型阶段进一步包括如下步骤:步骤1、指定待检测文件,打开文件获得文件指针,此时文件指针指向文件开头位置;步骤2、判断文件指针是否处于文件最后1字节,是,则结束流程,否,则进入步骤3;步骤3、计算文件指针指向前2字节的hash值v,将hash值v到hashmap表中查找,即n=hash[v],找到hash值对应的文件类型;步骤4、判断n是不是初始值0xff,是,则表示此时并没有找到符合存在类型,文件指针向后移动1字节进入步骤2继续查找,否,则进入步骤5;步骤5、得到第n种文件类型的特殊标签值,与文件指针指向的数据进行比较,如果不相符的话,计算n=prev[n],进入步骤4;否则即为识别到文件。下面结合一具体实施例对本发明作进一步说明:如:一个zip压缩文件表现为前面填充html信息,后面才有正常的压缩文件二进制信息。1、文件首位置(如图4所示);2、文件zip信息位置(如图5所示)1)假如我们要识别并提取的压缩包资源。假设已知rar5、zip、7z文件类型。其中rar5特殊标签值为“0x526172211a0701”共7字节;zip为“0x504b0304”,“0x504b0506”,“0x504b0708504b”,“0x504b3030504b”,有4种;7z为“0x377abcaf271c”,总共有6种。2)新建hashmap对象,其中有hash[65516],prev[256]数组,并初始化0xff。3)循环读取每个特殊标签值(“0x526172211a0701”,“0x504b0304”,“0x504b0506”,“0x504b0708504b”,“0x504b3030504b”,“0x377abcaf271c”),前2个字节hash值,假设第n=0个如0x5216(即特殊标签值“0x526172211a0701”的前2个字节)计算得到2482,则v=2482。存储hash[2482]值到prev[0]中(对计算机数组来说hash[2482]指的是hash位于2482的位置的值)。第n=1个0x504b(即特殊标签值“0x504b0304”的前2个字节)得5346,则v=5346。存储hash[5346]值到prev[1]中。后续如此。也就是说这边有6种文件类型,将6种文件类型用0、1、2、3、4、5进行对应;则hashmap表为hash数组prev数组0hash[2482]1hash[5346]2。。。3。。。4。。。5。。。4)得到欲识别的待检测文件指针,计算前2字节0x3c21,计算hash得到xxx1发现hash[xxx1]中值为0xff,不符合,则指针后移,得到0x2026再次计算hash得到xxx2,发现hash[xxx2]也是0xff,如此循环。5)直到指针指向0x504b,计算得到hash值v=5346,发现hash[5346]等于1,则n=1,查找第n个文件类型特殊标签值,发现完整特殊标识符为“0x504b0304”共4字节,于是比对待检测文件当前指针指向数据前4个字节,发现也是“0x504b0304”。表明识别到文件并从此导出。以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。当前第1页1 2 3 
技术特征:

1.一种基于hashmap识别文件类型的方法,其特征在于:所述方法包括创建hashmap阶段和寻找文件类型阶段:

所述创建hashmap阶段为:预先设定已知的文件类型,遍历n个的文件类型进行操作,即根据文件类型的特殊标签值的前2字节计算hash值,并将各个文件类型对应得到的hash值、第n个文件类型形成一个hashmap表;

所述寻找文件类型阶段为:程序运行时,判断文件指针指向文件开头位置是否为初始值,是,则指针后移,不是则计算待检测文件指针前2字节的hash值并查找hashmap表中是否存在,若未发现存在,指针后移,进行计算指针后移的2个字节的hash值进行比对,直至找到为止,若发现存在,则比对待检测文件当前指针指向数据与hashmap表对应的文件类型的特殊标签值是否完全相同,若相同,即能确认文件类型。

2.根据权利要求1所述的一种基于hashmap识别文件类型的方法,其特征在于:所述创建hashmap阶段进一步具体为:创建hash数组和prev数组,两数组初始化填充0xff;

程序运行期间,遍历预先设定已知的文件类型,将第1个文件类型到第n个文件类型都进行处理:即根据第n种文件类型特殊标签值的前2字节计算得hash值v,将hash数组位于v的值更换为n,并将原来的值存储到prev[n],如此循环构建一个以hash数组和prev数组的hashmap表。

3.根据权利要求2所述的一种基于hashmap识别文件类型的方法,其特征在于:所述hash数组大小必须大于等于最大hash值,所述prev数组大小必须大于等于文件类型数。

4.根据权利要求2所述的一种基于hashmap识别文件类型的方法,其特征在于:所述寻找文件类型阶段进一步包括如下步骤:

步骤1、指定待检测文件,打开文件获得文件指针,此时文件指针指向文件开头位置;

步骤2、判断文件指针是否处于文件最后1字节,是,则结束流程,否,则进入步骤3;

步骤3、计算文件指针指向前2字节的hash值v,将hash值v到hashmap表中查找,即n=hash[v],找到hash值对应的文件类型;

步骤4、判断n是不是初始值0xff,是,则表示此时并没有找到符合存在类型,文件指针向后移动1字节进入步骤2继续查找,否,则进入步骤5;

步骤5、得到第n种文件类型的特殊标签值,与文件指针指向的数据进行比较,如果不相符的话,计算n=prev[n],进入步骤4;否则即为识别到文件。

技术总结
本发明提供了一种基于HashMap识别文件类型的方法,所述方法为:预先设定已知文件类型,根据文件类型的特殊标签值前2字节计算hash值并建立一个HashMap表;程序运行中,计算文件指针前2字节的hash值并查找HashMap表,若未发现存在,指针后移,发现存在则比对完整特殊标签值,若找到则确认文件类型,否则指针后移继续比对,本发明能快速识别文件类型,且识别准确率高。

技术研发人员:刘德建;张伟泽;陈宏展
受保护的技术使用者:福建天晴在线互动科技有限公司
技术研发日:2020.05.12
技术公布日:2020.08.21

推荐一种基于HashMap识别文件类型的方法与流程的相关内容如下: