无需打开文件即生成校验和

Rod*_*son 0 c# cryptography

有没有办法计算只读文件的校验和?

我见过的唯一例子就是使用这样的算法

public string GetChecksum()
{
    FileStream file = new FileStream(_filePath, FileMode.Open);
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] retVal = md5.ComputeHash(file);
    file.Close();

    StringBuilder sb = new StringBuilder();
    foreach (byte t in retVal)
    {
        sb.Append(retVal[1].ToString("x2"));
    }
    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

您可以打开文件,即使它是只读的.
如果不打开文件就无法生成校验和,因为如果不打开文件就无法读取文件.

您应该传递FileAccess.Read以只读方式打开它.

此外,您应该使用SHA512而不是MD5生成校验和.

  • 在这里看一个例子,为什么MD5不适合文件校验和:http://www.mscs.dal.ca/~selinger/md5collision/ (2认同)