通过字节检查文件是否为 rar

Checking if the file is rar through its bytes

出于安全目的,我正在尝试通过其字节验证该文件是否为 .rar 文件。以下代码是我的代码,唯一的问题是 sub-header 与从文件生成的代码不匹配。我注意到不同的文件是不同的。你能解释一下为什么吗?

 static bool IsRARFile(string filePath)
    {
        bool isDocFile = false;
        //
        // File sigs from: http://www.garykessler.net/library/file_sigs.html
        //
        string msOfficeHeader = "52-61-72-21-1A-07-00-CF";
        string docSubHeader = "64-2E-63-73";

        using (Stream stream = File.OpenRead(filePath))
        {
            //get file header
            byte[] headerBuffer = new byte[8];
            stream.Read(headerBuffer, 0, headerBuffer.Length);
            string headerString = BitConverter.ToString(headerBuffer);

            if (headerString.Equals(msOfficeHeader, StringComparison.InvariantCultureIgnoreCase))
            {
                //get subheader
                byte[] subHeaderBuffer = new byte[4];
                stream.Seek(512, SeekOrigin.Begin);
                stream.Read(subHeaderBuffer, 0, subHeaderBuffer.Length);
                string subHeaderString = BitConverter.ToString(subHeaderBuffer);

                if (subHeaderString.Equals(docSubHeader, StringComparison.InvariantCultureIgnoreCase))
                {
                    isDocFile = true;
                }
            }
        }
        return isDocFile;
    }

这是因为您刚刚从某个地方为不同的文件类型复制了一个函数,并不是每个文件类型都有任何 "subheader" 的概念。如果是RAR,只需要检查主文件头即可。

我还建议修改变量的命名,如果一个函数说它正在检查 RAR 类型并且在内部所有变量都引用 DOC,那就太混乱了。