转:MD5辅助类

    public class MD5Helper
    {
        private static MD5 md5 = new MD5CryptoServiceProvider();

        private static string MD5ByteToString(byte[] md5Hash)
        {
       md5.Clear();
StringBuilder result = new StringBuilder();

for (int i = 0; i < md5Hash.Length; i++) { result.Append(md5Hash[i].ToString("X2")); } return result.ToString(); } /// <summary> /// 取文件的MD5 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static string GetFileMD5(string fileName) { Stream stream = File.OpenRead(fileName); return GetStreamMD5(stream); } /// <summary> /// 取流的MD5 /// </summary> /// <param name="stream"></param> /// <returns></returns> public static string GetStreamMD5(System.IO.Stream stream) { byte[] md5Hash = md5.ComputeHash(stream); stream.Close(); return MD5ByteToString(md5Hash); } /// <summary> /// 取字符串的MD5 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string GetStringMD5(string str) { byte[] source = System.Text.Encoding.Default.GetBytes(str); byte[] md5Hash = md5.ComputeHash(source);
       // return BitConverter.ToString(md5Hash);
return MD5ByteToString(md5Hash); } /// <summary> /// 取byte的MD5 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string GetBytesMD5(byte[] bytes) { byte[] md5Hash = md5.ComputeHash(bytes); return MD5ByteToString(md5Hash); } /// <summary> /// 对给定文件路径的文件加上标签 /// </summary> /// <param name="path">要加密的文件的路径</param> /// <returns>标签的值</returns> public static bool AddMD5(string path) { bool flag = true; if (MD5Helper.CheckMD5(path)) { flag = false; } try { FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] array = new byte[fileStream.Length]; fileStream.Read(array, 0, (int)fileStream.Length); fileStream.Close(); if (flag) { string s = MD5Helper.MD5Buffer(array, 0, array.Length); byte[] bytes = Encoding.ASCII.GetBytes(s); FileStream fileStream2 = new FileStream(path, FileMode.Open, FileAccess.ReadWrite); fileStream2.Write(array, 0, array.Length); fileStream2.Write(bytes, 0, bytes.Length); fileStream2.Close(); } else { FileStream fileStream3 = new FileStream(path, FileMode.Open, FileAccess.ReadWrite); fileStream3.Write(array, 0, array.Length); fileStream3.Close(); } } catch { return false; } return true; } /// <summary> /// 添加MD5的前缀,便于检查有无篡改 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static string AddMD5Profix(string input) { return MD5Helper.GetMD54(input) + input; } /// <summary> /// 对给定路径的文件进行验证 /// </summary> /// <param name="path">要加密的文件的路径</param> /// <returns>是否加了标签或是否标签值与内容值一致</returns> public static bool CheckMD5(string path) { bool result; try { FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); byte[] array = new byte[fileStream.Length]; fileStream.Read(array, 0, (int)fileStream.Length); fileStream.Close(); string a = MD5Helper.MD5Buffer(array, 0, array.Length - 32); string @string = Encoding.ASCII.GetString(array, array.Length - 32, 32); result = (a == @string); } catch { result = false; } return result; } /// <summary> /// 获得16位的MD5加密 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static string GetMD516(string input) { return MD5Helper.GetMD532(input).Substring(8, 16); } /// <summary> /// 获得32位的MD5加密 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static string GetMD532(string input) { MD5 mD = MD5.Create(); byte[] array = mD.ComputeHash(Encoding.Default.GetBytes(input)); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < array.Length; i++) { stringBuilder.Append(array[i].ToString("x2")); } return stringBuilder.ToString(); } /// <summary> /// 获得4位的MD5加密 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static string GetMD54(string input) { return MD5Helper.GetMD532(input).Substring(8, 4); } /// <summary> /// 获得8位的MD5加密 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static string GetMD58(string input) { return MD5Helper.GetMD532(input).Substring(8, 8); } /// <summary> /// 移除MD5的前缀 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static string RemoveMD5Profix(string input) { return input.Substring(4); } /// <summary> /// 验证MD5前缀处理的字符串有无被篡改 /// </summary> /// <param name="input">输入字符串</param> /// <returns></returns> public static bool ValidateValue(string input) { bool result = false; if (input.Length >= 4) { string input2 = input.Substring(4); if (input.Substring(0, 4) == MD5Helper.GetMD54(input2)) { result = true; } } return result; } private static string MD5Buffer(byte[] md5File, int index, int count) { MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider(); byte[] value = mD5CryptoServiceProvider.ComputeHash(md5File, index, count); string text = BitConverter.ToString(value); return text.Replace("-", ""); } }
posted @ 2013-06-22 22:38  LS庆  阅读(291)  评论(0编辑  收藏  举报