C#我应该使用CertUtil来计算zip文件的哈希吗



答案可能有点基于观点,但对我来说非常重要,因为我非常确信certutil是准确的。对于c#MD5类不确定。

我有一个zip文件,为了验证它是否正确,我想找到它的MD5哈希值。这是为了提取zip文件,并在我的C#.Net Framework 4.8控制台应用程序中使用其内容。

我目前已经要求客户(每个客户都有一个我的技术支持人员(使用CertUtil -hashfile命令来获取哈希并进行验证,但现在,我想由于客户的增加,我必须在我的应用程序中自动化它,并让我的人员松一口气。

我很困惑是应该使用CertUtil并使用Process.Start()在C#字符串中获得输出,还是应该使用.net框架的MD5类。

C#应用程序只部署在windows 10上,我可以对其进行管理访问,所以找不到certutil不是借口。

使用CertUtil,它将是这样的:

public static bool check_correct_installation()
{
var md5Checksum = "";
var startInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "cmd.exe",
Arguments = $"/C  CertUtil -hashfile "{HolocronFolders["Root"]}" MD5 | find /i /v "md5" | find /i /v "certutil"",
};
using var process = new Process {StartInfo = startInfo};
process.OutputDataReceived += (sender, e) => md5Checksum = e.Data;
process.Start();

var fileToRead = $"{HolocronFolders["Council"]}\force.sith";
if (!File.Exists(fileToRead)) return false;
var sithForce = JsonSerializer.Deserialize<SithForce>(File.ReadAllText(fileToRead));
return sithForce != null && sithForce.Checksum.Md5.ToString() != md5Checksum.Trim();
}

是的,基于意见,但这里仍然是我的:

好吧,你要为你创建的每个签名启动4(!(个进程(cmd.exe、certutil.exe和2xfind.exe(。光是这一点就把我从它身边拖走了。

然后,MD5类正在大量应用程序项目中使用,我想说,没有客观的方法来不信任它们,除非你有一个经过验证的例子,它们是";错误的";或者安全咨询等。

最后,MD5实现无论如何都使用底层的Windowsneneneba API(请参见此处查看rabbit整体(。因此,很可能它(最终(使用了相同的代码aus CertUtil.exe。

正如您所说,这可能是一个基于意见的答案,但我没有看到像您在代码中所说的那样坚持使用的问题。在互联网上搜索,似乎其他人也选择了类似的方法。试试看!

最新更新