61

SHA1CryptoServiceProvider()ファイルで を使用して、ファイルの SHA1 チェックサムを作成するにはどうすればよいですか?

4

4 に答える 4

82
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);
        }
    }
}

formattedSHA-1 ハッシュの文字列表現が含まれます。また、FileStreamバイト バッファの代わりに を使用することでComputeHash、ハッシュをチャンク単位で計算するため、ファイル全体を一度にロードする必要がなくなり、大きなファイルの場合に役立ちます。

于 2010-01-03T03:49:54.543 に答える
66

ComputeHash メソッドを使用します。ここを参照してください:

ComputeHash

スニペットの例:

using(var cryptoProvider = new SHA1CryptoServiceProvider())
{
    string hash = BitConverter
            .ToString(cryptoProvider.ComputeHash(buffer));

    //do something with hash
}

buffer はファイルの内容です。

于 2010-01-03T03:47:25.193 に答える
6

すでにファイルをストリームとして読み取っている場合は、次の手法で読み取り時にハッシュを計算します。唯一の注意点は、ストリーム全体を消費する必要があるということです。

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));
        }
    }
于 2015-01-23T17:02:49.033 に答える
3

また、試すことができます:

FileStream fop = File.OpenRead(@"C:\test.bin");
string chksum = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(fop));
于 2017-06-26T10:23:20.747 に答える