File 快速文件完整性验证

File 快速文件完整性验证,file,comparison,verification,crc,File,Comparison,Verification,Crc,有没有一种快速算法可以在不读取全部内容的情况下比较两个文件以进行验证?您可以在两个文件上使用MD5哈希,并以这种方式进行比较。不过,从技术上讲,它确实读取了整个文件。我不认为,如果不检查,你就不可能有100%的把握 在C语言中,one将以以下方式执行此操作抱歉,您没有提到特定的语言: protected string GetMD5HashFromFile(string fileName) { byte[] retVal = { }; using (FileStream file

有没有一种快速算法可以在不读取全部内容的情况下比较两个文件以进行验证?

您可以在两个文件上使用MD5哈希,并以这种方式进行比较。不过,从技术上讲,它确实读取了整个文件。我不认为,如果不检查,你就不可能有100%的把握

在C语言中,one将以以下方式执行此操作抱歉,您没有提到特定的语言:

protected string GetMD5HashFromFile(string fileName)
{
    byte[] retVal = { };

    using (FileStream file = new FileStream(fileName, FileMode.Open))
    using (MD5 md5 = new MD5CryptoServiceProvider())
    {
        retVal = md5.ComputeHash(file);
    }

    if (retVal.Length > 0)
    {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < retVal.Length; i++)
        {
            sb.Append(retVal[i].ToString("x2"));
        }

        return sb.ToString();
    }
    else
    {
        return string.Empty;
    }
}

bool CompareFiles(string fileName1, string fileName2)
{
    return (GetMD5HashFromFile(fileName1) == GetMD5HashFromFile(fileName2));
}

您可以对这两个文件使用MD5哈希,并以这种方式进行比较。不过,从技术上讲,它确实读取了整个文件。我不认为,如果不检查,你就不可能有100%的把握

在C语言中,one将以以下方式执行此操作抱歉,您没有提到特定的语言:

protected string GetMD5HashFromFile(string fileName)
{
    byte[] retVal = { };

    using (FileStream file = new FileStream(fileName, FileMode.Open))
    using (MD5 md5 = new MD5CryptoServiceProvider())
    {
        retVal = md5.ComputeHash(file);
    }

    if (retVal.Length > 0)
    {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < retVal.Length; i++)
        {
            sb.Append(retVal[i].ToString("x2"));
        }

        return sb.ToString();
    }
    else
    {
        return string.Empty;
    }
}

bool CompareFiles(string fileName1, string fileName2)
{
    return (GetMD5HashFromFile(fileName1) == GetMD5HashFromFile(fileName2));
}

您可以编写一个自定义CRC过程来读取文件的位。e、 g.每1k或类似的值16字节,而不是对整个文件进行加密。当然,风险更大,因为数据可能会在你看不到的地方发生变化,并且不会对你比较的区块产生影响。但是CRC也有点危险,因为两个完全不同的数据集可能返回相同的值。

您可以编写一个自定义CRC过程来读取文件的位。e、 g.每1k或类似的值16字节,而不是对整个文件进行加密。当然,风险更大,因为数据可能会在你看不到的地方发生变化,并且不会对你比较的区块产生影响。但是CRC也有点风险,因为两个非常不同的数据集可能返回相同的值。

恐怕您无法避免对两个文件进行完全读取,以确保它们完全相等

您可以先检查两个文件的大小;如果它们不同,则文件也不同,但仅在行分隔符上不同的文本文件又如何呢


如果大小相同,我看不出任何正确的方法可以继续,而是开始读取这两个文件。当然,它可以在缓冲区不同时立即停止,但它只能在处理最后一个字符时声明文件实际上是相等的。

恐怕您无法避免对两个文件进行完全读取,以确保它们完全相等

您可以先检查两个文件的大小;如果它们不同,则文件也不同,但仅在行分隔符上不同的文本文件又如何呢


如果大小相同,我看不出任何正确的方法可以继续,而是开始读取这两个文件。当然,它可以在缓冲区不同时立即停止,但它只能在处理最后一个字符时声明文件实际上是相等的。

除非读取每个字节,否则没有算法可以100%确保文件是相同的。证明很简单——假设存在这样一个算法,我们用它来比较两个文件。这意味着算法无法读取一定数量的字节。我可以通过更改一个文件中的字节而不是另一个文件中的字节来导致算法失败。

除非读取每个字节,否则没有算法可以100%确保文件是相同的。证明很简单——假设存在这样一个算法,我们用它来比较两个文件。这意味着算法无法读取一定数量的字节。我可以通过更改一个文件中的字节而不是另一个文件中的字节来导致算法失败。

从数学上讲,如果不完全读取两个文件,就无法确定大小相同的两个文件是否相等,但如果不完全读取这两个文件,就很可能确定它们是否不相等。这可以通过多种方式实现,例如使用哈希函数或短路比较。

从数学上讲,如果不完全读取两个文件,就无法确定大小相同的两个文件是否相等,但如果不完全读取这两个文件,就很可能确定它们不相等。这可以通过多种方式完成,例如使用哈希函数或短路比较。

谢谢Kyle,我会尝试一下,它不会“技术上”读取整个文件,而是读取整个文件!当然,这就是技术上说的含义。谢谢Kyle,我会尝试一下。它不是“技术上”读取整个文件,它读取整个文件!当然,这就是技术上的含义。