トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

MD5.cs

[C#]
オーバーロードされるスタティックメソッドGetMD5Valueを3つ持つクラス。
GetMD5Valueは引数をひとつ取り、文字列を返すスタティックメソッド。

  • 文字列引数:その文字列が存在するファイルパスの場合、そのファイルのMD5値を返す。そうでなければ、その文字列自体のMD5を返す。
  • バイト配列引数:GetMD5Value(strings s)から呼び出される。バイト配列のMD5値を返す。
  • ファイルストリーム引数:GetMD5Value(strings s)から呼び出される。ファイルストリームのMD5値を返す。

いずれのメソッドも、エラーが発生したらエラーのToString()を返す。

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

public class MD5Hasher {

    public static string GetMD5Value(string target)  {
        string message;
        
        try {
            if (File.Exists(target)) {
                using (FileStream fs = new FileStream(target, FileMode.Open, FileAccess.Read)) {
                    message = GetMD5Value(fs);
                }
            } else {
                message = GetMD5Value(Encoding.Default.GetBytes(target));
            }
        } catch(Exception e) {
            message = e.ToString();
        }
        
        return message;
    }



    public static string GetMD5Value(byte[] target) {
        byte[] hashedBytes = new byte[16];

        MD5 md5Hasher = MD5.Create();
        StringBuilder message = new StringBuilder();

        try {
            hashedBytes = md5Hasher.ComputeHash(target);

            for (int i=0; i<hashedBytes.Length; i++) {
                message.Append(hashedBytes[i].ToString("X2"));
            }

        } catch(Exception e) {
            message.Remove(0, message.Length);
            message.Append(e.ToString());
        }
        return message.ToString();
    }



    public static string GetMD5Value(FileStream target) {
        byte[] hashedBytes = new byte[16];

        MD5 md5Hasher = MD5.Create();
        StringBuilder message = new StringBuilder();

        try {
            hashedBytes = md5Hasher.ComputeHash(target);

            for (int i=0; i<hashedBytes.Length; i++) {
                message.Append(hashedBytes[i].ToString("X2"));
            }

        } catch(Exception e) {
            message.Remove(0, message.Length);
            message.Append(e.ToString());
        }
        return message.ToString();
    }
}