大家好好读一读。
我正在使用Java程序,我没有成功,但我正在改进它,问题是你可以添加文件,但我想验证所以添加的文件不会以任何人类已知的格式压缩,所以我不想要人们可以添加一个zip文件或rar或7z或gz,等等。
任何人都可以帮助我一个想法,这甚至可能吗?
提前感谢。
*编辑: 它由IT学生使用的程序,他们添加源代码的文件(.java,.class,.php,.doc,.mdb),路径保存在字符串中,最后,程序压缩文件,并将它们发送给老师,知道教师不想接收压缩或压缩文件,这就是验证的原因。
答案 0 :(得分:4)
你基本上在文件的字节上执行java等价的unix命令type
。大多数文件都有嵌入式指纹,可以向其他程序提供有关文件类型的提示。此指纹通常称为“幻数”
7zip - '7', 'z', 0xBC, 0xAF, 0x27, 0x1C
gzip - 0x1F, 0x8B
一个(不完整)list of magic numbers can be found here。
某些文件没有幻数,在这种情况下,您必须在文件中查找其他常用项,这些项强烈暗示它是可疑类型的文件。
依赖文件扩展名只会让每个人最终重命名扩展名。
答案 1 :(得分:1)
大多数压缩文件类型在开头都有一个“幻数”,几个字节表示文件类型(不仅是压缩文件,还有图像等)。您可以根据已知文件类型检查文件内容。您可以谷歌“魔术数字文件类型”。
答案 2 :(得分:0)
FWIW,此函数检查文件是否被gzip压缩:
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);
}
}