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