电脑里很多文件,例如,word,excel,txt,jpg,应用软件怎么区分文件类型呢p>
即使word文档,也是分为doc和docx,编码格式都不一样,office也需要区分不同的类型,再进行解码。
如果把一个word文档的后缀改成jgp,图片软件打开的时候就会 错。但是文件后缀是可以随便更改的,为了规范化,除了文件后缀之外,还需要一个方法来表示文件真正的类型。
魔数(magic number),因此而出现,魔数用于表示不同的文件类型。
在文件开头预留几个字节,存入魔数,应用软件在打开这个文件的时候,就能判断是否是支持的文件类型了。
比如,一个JPEG文件,它开头的一些字节可能是类似这样的”ffd8 ffe0 0010 4a46 4946 0001 0101 0047 ……JFIF…..G“,这里”ffd8“就表示了这个文件是一个JPEG类型的文件,”ffe0“表示这是JFIF类型结构。
魔数作用非常大:
1,有些文件没了后缀,需要先找到具体的类型,修改后缀才能打开。
2,文件操作中为了兼容错误,出现一些异常。例如一个word文档,本来是doc格式,兼容保存为docx后缀,但是实际上格式没变。用office或者wps打开是没问题的,但是自己写代码做点功能的时候,就会遇到问题。
3,web 站文件上传,用户可以将一些可执行的文件更改后缀传输上来,再通过其他办法修改为可执行,这样就是一个安全漏洞了。
例如:
压缩文件
文件类型 | 扩展名 | 16进制数字 xx这里表示变量 |
Ascii数字 . = 不是Ascii字符 |
---|---|---|---|
Bzip | .bz | 42 5a | BZ |
Compress | .Z | 1f 9d | .. |
gzip format | .gz | 1f 8b | .. |
pkzip format | .zip | 50 4b 03 04 | PK.. |
其他文件有自己的魔数,不一一表述了。
判断方法:
1,设置文件输入流。
2,读取前几个字节,获得魔数,以16进制表示。
3,对比,判断类型。
具体的代码实现:
参考链接:
百科 魔数
https://baike.baidu.com/item/魔数/2464954=aladdin
Java 通过魔数判断上传文件的类型
https://blog.csdn.net/ycb1689/article/details/79712623
java判断文件的真实类型
https://blog.csdn.net/qq_29663071/article/details/79756381
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!