常见文件类型魔数
PNG
image/png
PNG图片
魔数:89 50 4E 47 0D 0A 1A 0A
PNG图片文件的标准魔数,以89 50 4E 47开头
JPG
image/jpeg
JPEG图片
魔数:FF D8 FF
JPEG图片文件的标准魔数,以FF D8 FF开头
GIF
image/gif
GIF图片
魔数:47 49 46 38
GIF图片文件的标准魔数,以GIF8开头
PDF
application/pdf
PDF文档
魔数:25 50 44 46
PDF文档的标准魔数,以%PDF开头
ZIP
application/zip
ZIP压缩包
魔数:50 4B 03 04
ZIP压缩包的标准魔数,以PK开头
DOCX
application/vnd.openxmlformats-officedocument.wordprocessingml.document
Word文档
魔数:50 4B 03 04
DOCX文件的标准魔数,与ZIP文件相同,因为DOCX本质上是ZIP格式
MP4
video/mp4
MP4视频
魔数:00 00 00 18 66 74 79 70
MP4视频文件的标准魔数,以ftyp开头
MP3
audio/mpeg
MP3音频
魔数:49 44 33
MP3音频文件的标准魔数,以ID3开头
AI
application/postscript
Adobe Illustrator
魔数:25 50 44 46
Adobe Illustrator文件的标准魔数,以%PDF开头
BMP
image/bmp
位图文件
魔数:42 4D
BMP位图文件的标准魔数,以BM开头
CLASS
application/java-vm
Java类文件
魔数:CA FE BA BE
Java类文件的标准魔数
JP2
image/jp2
JPEG 2000图片
魔数:00 00 00 0C 6A 50 20 20
JPEG 2000图片文件的标准魔数
TIF
image/tiff
TIFF图片
魔数:49 49
TIFF图片文件的标准魔数,以II开头
WAV
audio/wav
WAV音频
魔数:52 49 46 46
WAV音频文件的标准魔数,以RIFF开头
ELF
application/x-executable
Linux可执行文件
魔数:7F 45 4C 46
ELF可执行文件的标准魔数,以.ELF开头
PSD
image/vnd.adobe.photoshop
Photoshop文件
魔数:38 42 50 53
Photoshop文件的标准魔数,以8BPS开头
WMF
image/x-wmf
Windows图元文件
魔数:D7 CD C6 9A
Windows图元文件的标准魔数
MID
audio/midi
MIDI音频
魔数:4D 54 68 64
MIDI音频文件的标准魔数,以MThd开头
ICO
image/x-icon
图标文件
魔数:00 00 01 00
Windows图标文件的标准魔数
AVI
video/x-msvideo
AVI视频
魔数:52 49 46 46
AVI视频文件的标准魔数,以RIFF开头
SWF
application/x-shockwave-flash
Flash动画
魔数:46 57 53
Flash动画文件的标准魔数,以FWS开头
FLV
video/x-flv
Flash视频
魔数:46 4C 56
Flash视频文件的标准魔数,以FLV开头
MOV
video/quicktime
QuickTime视频
魔数:6D 6F 6F 76
QuickTime视频文件的标准魔数,以moov开头
WMV
video/x-ms-wmv
Windows视频
魔数:30 26 B2 75 8E 66 CF
Windows视频文件的标准魔数
WMA
audio/x-ms-wma
Windows音频
魔数:30 26 B2 75 8E 66 CF
Windows音频文件的标准魔数
GZ
application/gzip
GZIP压缩包
魔数:1F 8B 08
GZIP压缩包的标准魔数
TAR
application/x-tar
TAR压缩包
魔数:75 73 74 61 72
TAR压缩包的标准魔数
MSI
application/x-msi
Windows安装包
魔数:D0 CF 11 E0 A1 B1 1A E1
Windows安装包的标准魔数
DLL
application/x-msdownload
动态链接库
魔数:4D 5A
Windows动态链接库的标准魔数,以MZ开头
EXE
application/x-msdownload
可执行文件
魔数:4D 5A
Windows可执行文件的标准魔数,以MZ开头
RAR
application/x-rar-compressed
RAR压缩包
魔数:52 61 72 21 1A 07 00
RAR压缩包的标准魔数,以Rar!开头
SYS
application/x-msdos-program
系统文件
魔数:4D 5A
Windows系统文件的标准魔数,以MZ开头
HLP
application/winhlp
帮助文件
魔数:3F 5F 03 00
Windows帮助文件的标准魔数
VMDK
application/x-vmdk
VMware磁盘
魔数:4B 44 4D 56
VMware磁盘文件的标准魔数,以KDMV开头
PST
application/vnd.ms-outlook
Outlook数据文件
魔数:21 42 44 4E 42
Outlook数据文件的标准魔数,以!BDNB开头
DOC
application/msword
Word文档(旧版)
魔数:D0 CF 11 E0 A1 B1 1A E1
旧版Word文档的标准魔数
RTF
application/rtf
富文本文件
魔数:7B 5C 72 74 66 31
RTF文件的标准魔数,以{rtf1开头
XLS
application/vnd.ms-excel
Excel表格(旧版)
魔数:D0 CF 11 E0 A1 B1 1A E1
旧版Excel表格的标准魔数
PPT
application/vnd.ms-powerpoint
PowerPoint(旧版)
魔数:D0 CF 11 E0 A1 B1 1A E1
旧版PowerPoint的标准魔数
VSD
application/vnd.visio
Visio图表
魔数:D0 CF 11 E0 A1 B1 1A E1
Visio图表文件的标准魔数
XLSX
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Excel表格
魔数:50 4B 03 04
新版Excel表格的标准魔数,与ZIP文件相同
PPTX
application/vnd.openxmlformats-officedocument.presentationml.presentation
PowerPoint
魔数:50 4B 03 04
新版PowerPoint的标准魔数,与ZIP文件相同
MDB
application/x-msaccess
Access数据库
魔数:53 74 61 6E 64 61 72 64 20 4A 65 74
Access数据库文件的标准魔数
PS
application/postscript
PostScript文件
魔数:25 21
PostScript文件的标准魔数,以%!开头
MSG
application/vnd.ms-outlook
Outlook邮件
魔数:D0 CF 11 E0 A1 B1 1A E1
Outlook邮件文件的标准魔数
EPS
application/postscript
EPS文件
魔数:25 21 50 53 2D 41 64 6F 62 65 2D 33 2E 30 20 45 50 53 46 2D 33 20 30
EPS文件的标准魔数
JAR
application/java-archive
Java归档
魔数:50 4B 03 04 14 00 08 00 08 00
Java归档文件的标准魔数
SLN
text/plain
Visual Studio解决方案
魔数:4D 69 63 72 6F 73 6F 66 74 20 56 69 73 75 61 6C 20 53 74 75 64 69 6F 20 53 6F 6C 75 74 69 6F 6E 20 46 69 6C 65
Visual Studio解决方案文件的标准魔数
ZLIB
application/zlib
Zlib压缩
魔数:78 9C
Zlib压缩文件的标准魔数
SDF
application/x-sdf
SDF文件
魔数:78 9C
SDF文件的标准魔数
代码示例
PHP
function magic_bytes($path, $position = 0, $bytes = 4)
{
if (!file_exists($path)) {
return null;
}
$handle = fopen($path, 'rb');
fseek($handle, $position);
$bytes = bin2hex(fread($handle, $bytes));
fclose($handle);
return $bytes;
}
Java
public static String getMagicBytes(String filePath, int position, int bytes) {
try {
byte[] data = Files.readAllBytes(Paths.get(filePath));
ByteBuffer bb = ByteBuffer.wrap(data);
bb.position(position);
StringBuilder sb = new StringBuilder();
for(int i=0; i<bytes; i++) {
sb.append(String.format("%02X", bb.get()));
}
return sb.toString();
} catch (IOException e) {
return null;
}
}
Python
def get_magic_bytes(file_path, position=0, nbytes=4):
try:
with open(file_path, 'rb') as file:
file.seek(position)
magic_bytes = file.read(nbytes)
return magic_bytes.hex()
except FileNotFoundError:
print(f"File {file_path} not found.")
return None
Golang
import (
"fmt"
"os"
)
func getMagicBytes(filePath string, position, nbytes int) (string, error) {
file, err := os.Open(filePath)
if err != nil {
return "", err
}
defer file.Close()
bytes := make([]byte, nbytes)
_, err = file.ReadAt(bytes, int64(position))
if err != nil {
return "", err
}
return fmt.Sprintf("%x", bytes), nil
}
Dart
import 'dart:async';
import 'dart:io';
import 'dart:convert';
Future getMagicBytes(String path, [int position = 0, int nbytes = 4]) async {
var file = new File(path);
if (!await file.exists()) {
print("File does not exist.");
return null;
}
RandomAccessFile openedFile = await file.open(mode: FileMode.read);
await openedFile.setPosition(position);
List magicBytes = [];
for (int i = 0; i < nbytes; i++) {
magicBytes.add(await openedFile.readByte());
}
await openedFile.close();
return hex.encode(magicBytes);
}
文件魔数查询工具
文件魔数查询工具是一个专业的开发辅助工具,帮助开发者和安全研究人员快速识别和验证文件类型。文件魔数(Magic Bytes)是文件头部的一组特定字节序列,用于标识文件类型,是文件格式识别的重要依据。本工具提供了常见文件格式的魔数信息,包括文件扩展名、MIME类型、魔数特征码以及详细说明,帮助开发者准确识别文件类型,防止文件上传漏洞,提高系统安全性。无论是进行文件格式验证、安全审计还是开发文件处理功能,本工具都能提供专业的参考信息。
功能特点
- 完整分类:提供常见文件格式的魔数信息
- 详细说明:包含文件扩展名、MIME类型和魔数特征码
- 快速查询:支持按文件类型快速查找
- 安全参考:提供文件类型验证的安全建议
- 响应式设计:完美支持移动端和桌面端访问
使用场景
- 文件上传验证:准确识别上传文件类型
- 安全审计:检查文件类型验证机制
- 开发调试:验证文件格式识别功能
- 系统集成:实现文件类型自动识别
- 安全防护:防止恶意文件上传