上傳文件時經常需要做文件類型判斷,例如圖片、文檔等,普通做法是直接判斷文件后綴名,而文藝青年為了防止各種攻擊同時也會加上使用文件頭信息判斷文件類型。
原理很簡單:用文件頭判斷,直接讀取文件的前2個字節即可。
Demo
using System; using System.IO;
namespace HelloWorld { class Program { static void Main(string[] args) { FileStream fs = new FileStream(@"C:\test.rar", FileMode.Open, FileAccess.Read); BinaryReader reader = new BinaryReader(fs);//轉換為二進制流 byte[] buff = new byte[2]; string result = string.Empty; try { fs.Read(buff, 0, 2); result = buff[0].ToString() + buff[1].ToString(); } catch (Exception ex) { throw ex; }
reader.Close(); fs.Close();
if (result == "8297")//rar:8297 { Console.WriteLine("文件格式是rar." + result); } else { Console.WriteLine("文件格式不是rar." + result); } Console.ReadLine(); } } } |
附常見文件的文件頭信息
常見文件的文件頭(十進制)
jpg: 255,216
gif: 71,73
bmp: 66,77
png: 137,80
doc: 208,207
docx: 80,75
xls: 208,207
xlsx: 80,75
js: 239,187
swf: 67,87
txt: 70,67
mp3: 73,68
wma: 48,38
mid: 77,84
rar: 82,97
zip: 80,75
xml: 60,63
常用文件的文件頭如下(16進制):
JPEG (jpg),文件頭:FFD8FF
PNG (png),文件頭:89504E47
GIF (gif),文件頭:47494638
TIFF (tif),文件頭:49492A00
Windows Bitmap (bmp),文件頭:424D
CAD (dwg),文件頭:41433130
Adobe Photoshop (psd),文件頭:38425053
Rich Text Format (rtf),文件頭:7B5C727466
XML (xml),文件頭:3C3F786D6C
HTML (html),文件頭:68746D6C3E
Email [thorough only] (eml),文件頭:44656C69766572792D646174653A
Outlook Express (dbx),文件頭:CFAD12FEC5FD746F
Outlook (pst),文件頭:2142444E
MS Word/Excel (xls.or.doc),文件頭:D0CF11E0
MS Access (mdb),文件頭:5374616E64617264204A
WordPerfect (wpd),文件頭:FF575043
Postscript (eps.or.ps),文件頭:252150532D41646F6265
Adobe Acrobat (pdf),文件頭:255044462D312E
Quicken (qdf),文件頭:AC9EBD8F
Windows Password (pwl),文件頭:E3828596
ZIP Archive (zip),文件頭:504B0304
RAR Archive (rar),文件頭:52617221
Wave (wav),文件頭:57415645
AVI (avi),文件頭:41564920
Real Audio (ram),文件頭:2E7261FD
Real Media (rm),文件頭:2E524D46
MPEG (mpg),文件頭:000001BA
MPEG (mpg),文件頭:000001B3
Quicktime (mov),文件頭:6D6F6F76
Windows Media (asf),文件頭:3026B2758E66CF11
MIDI (mid),文件頭:4D546864