HUSKING - kotteri

技術系Note

【C#】ファイル内容のハッシュ値を求める

ファイルの同一性チェックなどでよくハッシュ値を使われることがある
今回はC#でファイルのハッシュ値を求めてみる


ハッシュ値を求めるファイルの内容

123456789
あいうえお


実際のコード

class Program
{
    static void Main(string[] args)
    {
        // EXEパスを取得
        var exePath = System.Reflection.Assembly.GetExecutingAssembly().Location;

        // ハッシュ値を求めるファイルパス
        var filePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(exePath), "Text.txt");

        // ハッシュ値算出
        using (var fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
        {
            /*
             * MD5でハッシュ値を求める
             */
            var md5 = System.Security.Cryptography.MD5.Create();
            var md5Hash = md5.ComputeHash(fs);
            Console.WriteLine($"MD5     : {BitConverter.ToString(md5Hash)}");


            // 読出し位置をリセット
            fs.Seek(0, System.IO.SeekOrigin.Begin);


            /*
             * SHA-1でハッシュ値を求める
             */
            var sha1 = System.Security.Cryptography.SHA1.Create();
            var sha1Hash = sha1.ComputeHash(fs);
            Console.WriteLine($"SHA-1   : {BitConverter.ToString(sha1Hash)}");



            // 読出し位置をリセット
            fs.Seek(0, System.IO.SeekOrigin.Begin);



            /*
             * SHA-256でハッシュ値を求める
             */
            var sha256 = System.Security.Cryptography.SHA256.Create();
            var sha256Hash = sha256.ComputeHash(fs);
            Console.WriteLine($"SHA-256 : {BitConverter.ToString(sha256Hash)}");
        }
        
        
        
        Console.ReadKey();
    }
}


コンソール出力

MD5     : 50-1A-F5-C8-DA-6E-4B-22-53-A4-67-42-89-DF-48-8E
SHA-1   : 5F-4C-A7-26-9A-CD-DD-C5-0C-7D-FD-47-26-D4-11-3A-21-79-0A-E9
SHA-256 : 4D-F7-89-F6-1E-56-DD-7F-62-7E-C4-69-2F-83-17-70-40-FF-47-F5-92-5F-10-C0-CF-66-B0-B9-41-84-51-24