📜  获取文件的sha1 c#(1)

📅  最后修改于: 2023-12-03 15:11:52.558000             🧑  作者: Mango

获取文件的SHA1值(C#)

SHA1是一种散列算法,用于将数据(文件、字符串等)转换为固定长度的唯一哈希值。在信息安全、数字签名等领域应用广泛。本文将介绍如何使用C#语言获取文件的SHA1值。

一、使用System.Security.Cryptography命名空间

C#中的System.Security.Cryptography命名空间提供了SHA1Managed类来计算SHA1值。以下是一个示例函数,返回指定文件的SHA1散列值:

using System.IO;
using System.Security.Cryptography;

public static string CalculateSHA1(string filePath)
{
    using (var sha1 = SHA1.Create())
    {
        using (var stream = File.OpenRead(filePath))
        {
            byte[] hash = sha1.ComputeHash(stream);
            return BitConverter.ToString(hash).Replace("-", "").ToLower();
        }
    }
}

其中,SHA1的计算是通过SHA1.Create()方法创建的实例实现的。Using语句用于在完成计算后正确释放资源。FileStream类用于打开指定文件并从中读取数据,计算数据的散列值hashBitConverter.ToString()方法将字节数组转换为十六进制字符串,并使用ToLower()方法将其转换为小写,去除其中的横线以便对比。最后,该函数将返回计算出的SHA1哈希值。

二、使用第三方库

如果不想自己编写SHA1计算函数,也可以使用第三方库,例如Bouncy Castle。以下是一个示例函数,返回指定文件的SHA1散列值:

using System.IO;
using Org.BouncyCastle.Crypto.Digests;

public static string CalculateSHA1(string filePath)
{
    using (var stream = File.OpenRead(filePath))
    {
        var digest = new Sha1Digest();
        byte[] block = new byte[digest.GetByteLength()];
        int length;
        while ((length = stream.Read(block, 0, block.Length)) > 0)
        {
            digest.BlockUpdate(block, 0, length);
        }
        byte[] hash = new byte[digest.GetDigestSize()];
        digest.DoFinal(hash, 0);
        return BitConverter.ToString(hash).Replace("-", "").ToLower();
    }
}

该函数使用Bouncy Castle库的Sha1Digest类计算SHA1值。while循环读取输入文件的数据块并更新摘要计算,DoFinal方法将计算结果存储在hash字节数组中。最后,函数返回计算出的SHA1哈希值。请注意,使用Bouncy Castle库计算SHA1值需要添加对应的NuGet包以及相应的命名空间。

三、使用PowerShell命令

在Windows系统上,还可以使用PowerShell命令来计算指定文件的SHA1值。打开Windows PowerShell控制台,运行以下命令:

Get-FileHash <FilePath> -Algorithm SHA1 | Format-List

其中,<FilePath>为指定文件的完整路径。运行上述命令后,将显示指定文件的SHA1值及其相关信息。

四、总结

本文介绍了3种计算文件SHA1值的方法,给出了C#代码和Windows PowerShell命令示例。根据不同的实际情况,选择合适的方法即可。