如何在C#中的列表框中显示文件的MD5和SHA-1校验和

本文关键字:MD5 校验和 SHA-1 显示文件 列表 | 更新日期: 2023-09-27 18:00:16

下面的函数可以扫描一个目录,返回其中的所有文件,并将信息保存到.txt文件中,但我如何以及在哪里编写函数来获取旁边文件的校验和?

示例:C:''Desktop''E01.text|32DC1515AFDB7DBBEE21363D590E5CEA

我真的很感激在这方面的任何帮助。

private void btnScan_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        if (fbd.ShowDialog() == DialogResult.OK)
            listBox1.Items.Clear();
        string[] files = Directory.GetFiles(fbd.SelectedPath);
        string[] dirs = Directory.GetDirectories(fbd.SelectedPath);
        foreach (string file in files)
        {
            listBox1.Items.Add(file);
        }
        {
            foreach (string dir in dirs)
            {
                listBox1.Items.Add(dir);
            }
        }
    }
    private void btnSave_Click(object sender, EventArgs e)
    {
        var saveFile = new SaveFileDialog();
        saveFile.Filter = "Text (*.txt)|*.txt";
        if (saveFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            using (var sw = new StreamWriter(saveFile.FileName, false))
                foreach (var item in listBox1.Items)
                    sw.Write(item.ToString() + Environment.NewLine);
            MessageBox.Show("This file was successfully saved.");
        }

如何在C#中的列表框中显示文件的MD5和SHA-1校验和

我整理了一些代码来帮助您。您可能需要对任何其他哈希算法执行同样的操作。

只需粘贴下面的片段,然后添加此修改:

    foreach (string file in files)
    {
        listBox1.Items.Add(file + " | " + GetSHA1Hex(file));
    }

给你:

 public static string GetSHA1Hex(string fileName)
    {
        string result = string.Empty;
        using (System.Security.Cryptography.SHA1 sha1 = System.Security.Cryptography.SHA1.Create("SHA1"))
        using (System.IO.FileStream fs = System.IO.File.Open(fileName, System.IO.FileMode.Open))
        {
            byte[] b = sha1.ComputeHash(fs);
            result = ToHex(b);
        }
        return result;
    }
    public static string[] HexTbl = Enumerable.Range(0, 256).Select(v => v.ToString("X2")).ToArray();
    public static string ToHex(IEnumerable<byte> array)
    {
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (var v in array)
            s.Append(HexTbl[v]);
        return s.ToString();
    }

注意,我从这里复制了ToHex->byte[]到十六进制字符串