受欢迎的博客标签

在.NetCore中使用Myrmec检测文件真实格式

Published

Table of Content

Myrmec 检测文件格式类库

图片元信息Exif

 

 

Myrmec 是一个用于检测文件格式的库,Myrmec不同于其它库或者手写检测代码,Myrmec不依赖文件扩展名(在实际使用中,你的用户很可能使用虚假的扩展名欺骗你的应用程序),Myrmec会检测文件的二进制头,并在其元数据库中匹配来获得文件的格式。

例如Jpg图片的二进制头是 "FF D8 FF DB" 那么Myrmec会匹配到这个文件头,并获得两个结果--"jpg"和"jpeg"。

如何使用

首先安装 nuget 包  Install-Package Myrmec 或者通过 DotnetCli  dotnet add package Myrmec 

编写匹配代码 

// 创建嗅探器 

Sniffer sniffer = new Sniffer();

// 使用元数据填充嗅探器 5

sniffer.Populate(FileTypes.CommonFileTypes); 

// 获取要匹配文件的文件头,一般20个字节就够了,有的格式可能需要更长 

byte[] fileHead = ReadFileHead(); 

// 匹配并获取结果 

List<string> results = sniffer.Match(fileHead)

为什么结果是List<String>?

许多时候一个文件格式会对应多个扩展名,比如jpg。还有的时候多种文件格式都是一种文件格式,比如 zip、apk、pptx 它们都是zip achive ,所以当你匹配了一个zip文件,那么你最少会获得3个扩展名。当结果是空时,说明没有匹配到结果。  

查询多个结果或者一个 会有这样的情况:文件格式A 的文件头是 "ff,11,22" ,文件格式B 的 文件头是“ff,11,22,33”,这时候你要匹配的文件头是"ff,11,22,33,44",那么它最多会匹配到这两个结果,并返回他们包含的所有扩展名 1 // 这会在匹配到第一个结果时就返回 2 // default is false 3 List<string> results = sniffer.Match(fileHead,false); 4 5 // 这会匹配到所有的结果 6 List<string> results = sniffer.Match(fileHead,true); 添加自定义的文件头 也许你创建了一种文件格式,或者你所使用的文件格式不在元数据中,这时你可以使用下面的代码将其加入元数据: 1 var data = new byte[] 2 { 3 0x11, 4 0x22, 5 0x33 6 }; 7 sniffer.Add(data, new[] { "what", "file", "type" }); 注意这个新添加的格式拥有3个扩展名。 获取MimeType 1 List<string> result = sniffer.Match(head); 2 string mimeType = MimeTypes.GetMimeType(result.First());   或者 1 string mimeType = MimeTypes.GetMimeType("png");   在下一个版本中,获取MimeType将会被替换成string 的扩展方法。   元数据来源 元数据来自维基百科 List of file signatures. RoadMap 接下来要做的事就是支持 带有偏移量的 文件格式,例如  ff,11,ff 起始偏移10字节 以及  11,ff,??,??,??,11,??,fd 这种含有跳跃的文件格式。 不过事实上他们两个是一种形式,预计下一个版本就会发布对其的支持。 支持 .net standard.现在是.net core 2,在未来会调整到.net standard

github地址:https://github.com/rocketRobin/myrmec.

 

图片元信息Exif-Exchangeable Image File(Exif)

Exif 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息在JPEG格式头部插入

通过查看优秀作品的 Exif参数,你能够知道作者使用的器材,并且了解到作者所处的环境以及拍摄时使用的相机设置。通过比对Exif数据与图像内容,你可以直观地了解到曝光组合的不同会对图像产生什么影响、以及不同焦距的镜头会产生什么样的视觉效果等,从而在以后的拍摄中进行改进,这也是数码照片相对于传统胶片的一个重要优势。

 

微信朋友圈的照片不会泄露自己的位置

微信在上传照片的时候,微信会把Exif信息隐藏掉。所以不会暴露你的行踪。

但如果你在聊天框内发送图片,并且是发送原图的情况下,那是会包含所有的Exif信息的哦!

修改过Exif元信息,能查出来么

如果用PS等软件修改过图片,这些是会注入到EXif信息里面的,在Tags里面的软件一栏会提示Adobe Photoshop软件信息,修改时间等。

但是,不排除遇上Exif大神,他可以把参数调整的天衣无缝。不过一般的Exif软件针对Exif元信息里面的一些标签是没有办法修改的,所以一般情况下,只要你修改了,都是会留下痕迹。还是那句话,不排除大神可以把参数平衡好。