- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{category 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();
}
}