通过二进制头识别文件类型

转载 2016年05月16日 18:22:36
通过二进制头识别文件类型,可以使用UE或者WinHex软件打开

1.JPEG/JPG
- 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG文件标识) 
- 文件结束标识 (2 bytes): $ff, $d9 (EOI) 

2.TGA
- 未压缩的前5字节   00 00 02 0000
- RLE压缩的前5字节   00 00 10 0000

3.PNG
- 文件头标识 (8 bytes)   89 50 4E 470D 0A 1A 0A

4.GIF
- 文件头标识 (6 bytes)   47 49 46 3839(37) 61
                       G  I  F  8 9 (7)  a

5.BMP
- 文件头标识 (2 bytes)   424D
                       B   M

6.PCX
- 文件头标识 (1 bytes)   0A

7.TIFF
- 文件头标识 (2 bytes)   4D 4D 或 4949

8.ICO
- 文件头标识 (8 bytes)   00 00 01 0001 00 20 20 

9.CUR
- 文件头标识 (8 bytes)   00 00 02 0001 00 20 20

10.IFF
- 文件头标识 (4 bytes)   46 4F 524D
                       F  O  R  M

11.ANI
- 文件头标识 (4 bytes)   52 49 4646
                        R  I  F F

    根据这些文件头标识的收集,我可以写一个识别图像格式的模块了。但是在写这个模块之前可以对收集到的文件头标识进行优化,使得程序中字符串比对次数尽量的少。
1.JPEG我们知需要比对文件头的$ff, $d8这两个字符,而不用读取最后的两个结束标识了。
2.TGA,ICO,CUR只需比对第三个与第五个字符即可。
3.PNG比对[89][50]这两个字符。
4.GIF比对[47][49][46]与第五个字符。

废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如

jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)

BMP文件 是 424D ---4D42

其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了。

原文链接:http://zjf30366.blog.163.com/blog/static/41116458201042194542973/

附:常见文件的文件头标识

 

255044PDF 
526563 EML 
D0CF11 PPT 
4D5AEE COM 
E93B03 COM 
4D5A90 EXE 
424D3E BMP 
49492A TIF 
384250 PSD 
C5D0D3 EPS 
0A0501 PCS 
89504E PNG 
060500 RAW 
000002 TGA 
60EA27 ARJ 
526172 RAR 
504B03 ZIP 
495363 CAB 
1F9D8C Z 
524946 WAV 
435753 SWF 
3026B2 WMV 
3026B2 WMA 
2E524D RM 
00000F MOV 
000077 MOV 
000001 MPA 
FFFB50 MP3 
234558 m3u 
3C2144 HTM 
FFFE3C XSL 
3C3F78 XML 
3C3F78 MSC 
4C0000 LNK 
495453 CHM 
805343 scm 
D0CF11 XLS 
31BE00 WRI 
00FFFF MDF 
4D4544 MDS 
5B436C CCD 
00FFFF IMG 
FFFFFF SUB 
17A150 PCB 
2A5052 ECO 
526563 PPC 
000100 DDB 
42494C LDB 
2A7665 SCH 
2A2420 LIB 
434841 FNT 
7B5C72 RTF 
7B5072 GTD 
234445 PRG 
000007 PJT 
202020 BAS 
000002 TAG 
4D5A90 dll 
4D5A90 OCX 
4D5A50 DPL 
3F5F03 HLP 
4D5A90 OLB 
4D5A90 IMM 
4D5A90 IME 
3F5F03 LHP 
C22020 NLS 
5B5769 CPX 
4D5A16 DRV 
5B4144 PBK 
24536F PLL 
4E4553 NES 
87F53E GBC 
00FFFF SMD 
584245 XBE 
005001 XMV 
000100 TTF 
484802 PDG 
000100 TST
414331 dwg 
D0CF11 max

另外还有一些重要的文件,没有固定的文件头,如下: 

TXT 没固定文件头定义 
TMP 没固定文件头定义 
INI 没固定文件头定义 
BIN 没固定文件头定义 
DBF 没固定文件头定义 
C 没没固定文件头定义 
CPP 没固定文件头定义 
H 没固定文件头定义 
BAT 没固定文件头定义 

还有一些不同的文件有相同的文件头,最典型的就是下面: 

4D5A90 EXE 
4D5A90 dll 
4D5A90 OCX 
4D5A90 OLB 
4D5A90 IMM 
4D5A90 IME


参考:http://blog.sina.com.cn/s/blog_6bfe46bc0100q1bx.html

根据文件头判断文件类型

最近在项目中需要判断文件类型,如果只根据文件后缀名称,还不够严格(有可能手动修改后缀名称),所以这种判断文件类型有差错,想起了以前在网上看到使用根据读取头文件部分内容与标准格式文件对比,即可准确判断文...
  • yudajun
  • yudajun
  • 2015年12月11日 15:19
  • 3913

通过文件头识别文件类型

  • 2010年10月27日 23:28
  • 138KB
  • 下载

判断一个文件是否为二进制文件

判断一个文件是否为二进制文件 public static boolean isBinary(File file) { boolean isBinary = false; try...
  • harbor1981
  • harbor1981
  • 2016年08月10日 18:06
  • 932

【原创】如何判断文件为文本文件还是二进制文件

最近写一个程序用于读取STL文件(一种三维文件格式),并显示出来。STL文件存储格式有一个特殊点就是分两种类型,一种是ASCII文件类型,一种是二进制文件类型。ASCII文件类型的,里面就是一些字符串...
  • lemonbox
  • lemonbox
  • 2011年02月09日 14:39
  • 6199

根据文件头数据判断文件类型

转出处:http://blog.csdn.net/songylwq/article/details/6139753 现有一文件,其扩展名未知或标记错误。假设它是一个正常的、非空的文件,且将扩展名更正...
  • xbsoul
  • xbsoul
  • 2017年12月12日 10:56
  • 22

文件二进制头与文件类型的判断

如果有些文件,比如是媒体文件,因格式太多,如果没有后缀名的话,在WIN下面是很难知道他是什么类型的,只有用播放器去放才知道,最近在网上搜了一下,整理了一些常用文件的头部编码,这些头部编码可以用Ultr...
  • sdomain
  • sdomain
  • 2009年10月06日 16:12
  • 7688

二进制文件样本及格式相关说明

  • 2009年09月09日 16:07
  • 31KB
  • 下载

C语言实现二进制文件读写

我一直觉得二进制文件读写是个很容易的事,所以一直没在意,最近在写一个http客户端,实现文件下载的时候,发现总有问题,后来才发现是忘记写文件用二进制方式,惭愧的很啊。然后,就在网上搜索了一下,发现通过...
  • AresGod
  • AresGod
  • 2007年10月28日 20:01
  • 24722

通过查看二进制文件判断文件类型

  • 2009年08月12日 21:41
  • 2KB
  • 下载

根据文件头判断文件类型

最近在项目中需要判断文件类型,如果只根据文件后缀名称,还不够严格(有可能手动修改后缀名称),所以这种判断文件类型有差错,想起了以前在网上看到使用根据读取头文件部分内容与标准格式文件对比,即可准确判断文...
  • yudajun
  • yudajun
  • 2015年12月11日 15:19
  • 3913
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过二进制头识别文件类型
举报原因:
原因补充:

(最多只允许输入30个字)