繁体   English   中英

寻找从魔术数字确定文件类型

[英]Looking for determine file type from the magic number

是否可以根据文件的魔数确定文件类型?

如果我了解魔术数字的大小可以不同,也许参考词典或类似库的内容对我有帮助?

可以从文件的魔数确定文件类型

是的,您可以,因为每种文件格式都有不同的幻数。

例如用于.jpg文件的FFD8

在此处查看文件中的幻数

Linux上的file命令正是这样做的。 研究其内部结构,以了解如何使用其幻数(签名字节)识别文件。 完整的源代码可在darwinsys.com/file上找到

以下2个列表是最全面的列表,其中包含文件类型及其魔幻数字:
- 文件签名表
-Linux魔术数字

JmimeMagic是这样的Java库

使用libmagic( 在Ubuntu系统上apt-get install libmagic-dev )。

下面的示例使用默认的magic数据库查询在命令行上传递的文件。 (本质上是file命令的实现。有关更多详细信息/功能,请参见man libmagic

#include <iostream>
#include <magic.h>
#include <cassert>
int main(int argc, char **argv) {
    if (argc == 1) {
            std::cerr << "Usage "  << argv[0] << " [filename]" << std::endl;
            return -1;
    }
    const char * fname = argv[1];
    magic_t cookie = magic_open(0);
    assert (cookie !=nullptr);
    int rc = magic_load(cookie, nullptr);
    assert(rc == 0);
    auto f=  magic_file(cookie, fname);
    if (f ==nullptr) {
        std::cerr << magic_error(cookie) << std::endl;
    } else {
        std::cout << fname << ' ' << f << std::endl;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM