首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中执行SHA1文件校验和?

如何在C#中执行SHA1文件校验和?
EN

Stack Overflow用户
提问于 2010-01-03 11:45:10
回答 4查看 48.9K关注 0票数 61

如何在文件上使用SHA1CryptoServiceProvider()来创建文件的SHA1校验和?

EN

回答 4

Stack Overflow用户

发布于 2010-01-03 11:49:55

代码语言:javascript
复制
using (FileStream fs = new FileStream(@"C:\file\location", FileMode.Open))
using (BufferedStream bs = new BufferedStream(fs))
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        byte[] hash = sha1.ComputeHash(bs);
        StringBuilder formatted = new StringBuilder(2 * hash.Length);
        foreach (byte b in hash)
        {
            formatted.AppendFormat("{0:X2}", b);
        }
    }
}

formatted包含SHA-1散列的字符串表示。此外,通过使用FileStream而不是字节缓冲区,ComputeHash以块为单位计算散列,因此您不必一次性加载整个文件,这对大文件很有帮助。

票数 82
EN

Stack Overflow用户

发布于 2010-01-03 11:47:25

使用ComputeHash方法。请看这里:

ComputeHash

示例代码片段:

代码语言:javascript
复制
using(var cryptoProvider = new SHA1CryptoServiceProvider())
{
    string hash = BitConverter
            .ToString(cryptoProvider.ComputeHash(buffer));

    //do something with hash
}

其中buffer是文件的内容。

票数 66
EN

Stack Overflow用户

发布于 2015-01-24 01:02:49

如果您已经将文件作为流读取,则下面的技术将在您读取它时计算散列。唯一需要注意的是,您需要使用整个流。

代码语言:javascript
复制
class Program
    {
        static void Main(string[] args)
        {
            String sourceFileName = "C:\\test.txt";
            Byte[] shaHash;

            //Use Sha1Managed if you really want sha1
            using (var shaForStream = new SHA256Managed())
            using (Stream sourceFileStream = File.Open(sourceFileName, FileMode.Open))
            using (Stream sourceStream = new CryptoStream(sourceFileStream, shaForStream, CryptoStreamMode.Read))
            {
                //Do something with the sourceStream 
                //NOTE You need to read all the bytes, otherwise you'll get an exception ({"Hash must be finalized before the hash value is retrieved."}) 
                while(sourceStream.ReadByte() != -1);                
                shaHash = shaForStream.Hash;
            }

            Console.WriteLine(Convert.ToBase64String(shaHash));
        }
    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1993903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档