• 转: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("-", ""); } }
  • 相关阅读:
    团队活动
    实力提升
    软工人必须要知道的几个工具
    博客/论坛:(技术分享)
    CSS怎样设置多个字体,设置多个字体的时候要注意什么
    canvas绘制bitmap全部填充(当bitmap的宽高小于绘制区域的时候)
    CSS字体
    weditor元素定位异常
    python ImportError: C extension: DLL load failed while importing strptim
    python:导入不同路径下相同名称的模块
  • 原文地址:https://www.cnblogs.com/lusunqing/p/3150330.html
Copyright © 2020-2023  润新知