所有的文件的开头4个字节都被称为魔数,可以被鉴定是否是一个Class文件

在Jpg等文件中都有魔数,这也是方便有人去篡改这个文件后面的扩展名

在Java的Class文件中,魔数被确定为 0xCAFEBABE 咖啡宝贝,貌似是来源于某个咖啡品牌

在Java中,我们可以通过魔数做一些文件鉴别的事情,比如

(可以使用NotePad++ 加上 Hex-Editor 插件来读取Class文件)

图片

对应的java中,可以判断是什么类型的文件

public static String geFileType(InputStream file) throws IOException {

HashMap<String, String> fileTypes = new HashMap<>();

fileTypes.put(“47494638″,”GIF”);

fileTypes.put(“89504E47″,”PNG”);

fileTypes.put(“FFD8FF”,”JPEG”);

fileTypes.put(“424D”,”BMP”);

byte[] head = new byte[28];

//输入流可能还有其他作用,先不关

file.read(head,0,28);

String magicNum = new StringBuilder().append(String.format(“%02X “, head)).toString();

AtomicReference<String> realFile = null;

fileTypes.keySet().stream().forEach(s->{

if(magicNum.equals(s)){

realFile.set(fileTypes.get(s));

}

});

return realFile.get();

}

发表评论

邮箱地址不会被公开。 必填项已用*标注