检查文件是否通过其字节进行rar

时间:2015-06-06 09:06:17

标签: c# security byte

出于安全考虑,我试图通过其字节验证该文件是.rar文件。以下代码是我的代码,唯一的问题是子标头与从文件生成的标头不匹配。我注意到不同文件的不同之处。你能解释一下为什么吗?

 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;
    }

1 个答案:

答案 0 :(得分:1)

这是因为你刚刚从某个地方为不同的文件类型复制了一个函数,并不是每个文件类型都有任何“subheader”的概念。在RAR的情况下,您只需要检查主标题。

我还建议修改变量的命名,如果函数说它正在检查RAR类型并且内部所有变量都引用DOC,那么这是一个非常错误的错误。