2

大家好,愿意阅读这篇文章的人。

我正在使用一个 Java 程序,我没有成功,但我正在改进它,问题是你可以添加文件,但我想验证添加的文件不会以任何人类已知的格式压缩,所以我不希望人们能够添加 zip 文件或 rar 或 7z 或 gz 等等。

任何人都可以帮我一个想法,这甚至可能吗?

提前致谢。

*编辑:IT学生使用的程序,他们添加了他们的源代码文件(.java,.class,.php,.doc,.mdb),路径保存在字符串中,最后,程序压缩文件,并将它们发送给老师,知道老师不想接收压缩或压缩文件,这就是验证的原因。

4

3 回答 3

4

您基本上type对文件的字节执行与 unix 命令等效的 java 。大多数文件都有一个嵌入式指纹,可以向其他程序提示它是什么类型的文件。这个指纹通常被称为“幻数”

7zip - '7', 'z', 0xBC, 0xAF, 0x27, 0x1C
gzip - 0x1F, 0x8B

可以在此处找到一份(不完整的)幻数列表。

有些文件没有幻数,在这种情况下,您必须在文件中寻找其他常见的项目,这强烈暗示它是可疑类型的文件。

依赖文件扩展名只会让每个人最终重命名扩展名。

于 2012-09-10T16:03:24.600 回答
1

大多数压缩文件类型的开头都有一个“幻数”,几个字节表示文件的类型(不仅是压缩文件,还有图像等)。您可以根据已知文件类型检查文件内容。您可以在“幻数文件类型”上搜索。

于 2012-09-10T16:01:41.860 回答
0

FWIW,此函数检查文件是否被压缩:

public static boolean isGzipped(File f) {
    InputStream is = null;
    try {
        is = new FileInputStream(f);
        byte [] signature = new byte[2];
        int nread = is.read( signature ); //read the gzip signature
        return nread == 2 && signature[ 0 ] == (byte) 0x1f && signature[ 1 ] == (byte) 0x8b;
    } catch (IOException e) {
        Log.x(e);
        return false;
    } finally {
        Closer.closeSilently(is);
    }
}

请参阅Closer.closeSilently()此处。

于 2015-05-19T14:29:56.420 回答