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

时间:2011-01-05 00:03:24

标签: 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();
}

4 个答案:

答案 0 :(得分:5)

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

您应该通过FileAccess.Read以只读方式将其打开。

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

答案 1 :(得分:3)

根据documentation,您正在使用的FileStream构造函数打开文件进行读/写。使用指定FileAccess.Read。

的重载
  

构造函数被赋予读/写   访问该文件,它被打开   共享读取权限

答案 2 :(得分:1)

如果不读取整个文件,则无法生成校验和。

通常,只能打开只读文件。可能存在阻止给定用户打开文件的文件或文件夹权限。

答案 3 :(得分:0)

嗯,不。您必须阅读文件以对其中的内容执行任何操作。但是,当您希望FileStream(_filePath,FileAccess.Read,true,4096,true);以只读方式打开时,您将使用通用访问权限打开。 StreamReader会自动执行此操作。