在网上查magic number的相关介绍的时候,看到很多人的博客中说magic number之所以叫magic number,就是因为我们并不知道它有什么含义。。。
最后看了知乎上的回答:
举了例子:
ELF文件头会写入一个magic number,检查这个数和自己预想的是否一致可以判断文件是否损坏。
在缓冲区数组旁放一个magic number(称作canary金丝雀),通过检查是否一致可检测缓冲区溢出攻击。
另外维基百科上提到了很多含有magic number的文件格式:
1. 一些图像文件中存在的魔数。比如,bmp文件中的'BM',JPEG/JFIF中的'JFIF',等等。
2. 某些格式的声音、视频文件中存在中的魔数。
3. PE文件、ELF文件中存在的魔数。
4. 各种文本编码中的BOM也可以看做魔数。比如UTF-8、UTF-16、UTF-32的BOM。
2. 某些格式的声音、视频文件中存在中的魔数。
3. PE文件、ELF文件中存在的魔数。
4. 各种文本编码中的BOM也可以看做魔数。比如UTF-8、UTF-16、UTF-32的BOM。
此外,Linux中的file命令,是根据文件中的魔数来判断文件类型,这要优于使用文件后缀来进行判断。(似乎是magic number的另一个用处)
对于知乎上回答的例子,magic number就是对你要处理的一段数据,最初进行的一个粗略判断。主要是怕处理了半天,原来输入是段垃圾,浪费自己时间,甚至把自己程序搞奔溃。你可以认为,magic number读到是对的,你有就有99%的信心,这个数据应该不是垃圾,值得分析。但是真要保证这个数据是99.9999999%正确的,恐怕还是要CRC甚至数字签名才行。
参考:https://www.zhihu.com/question/22018894