public class MD5Helper
{
private static MD5 md5 = new MD5CryptoServiceProvider(); private static string MD5ByteToString(byte[] md5Hash)
{
       md5.Clear();
StringBuilder result = new StringBuilder();
for (int i = ; 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, , (int)fileStream.Length);
fileStream.Close();
if (flag)
{
string s = MD5Helper.MD5Buffer(array, , array.Length);
byte[] bytes = Encoding.ASCII.GetBytes(s);
FileStream fileStream2 = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
fileStream2.Write(array, , array.Length);
fileStream2.Write(bytes, , bytes.Length);
fileStream2.Close();
}
else
{
FileStream fileStream3 = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
fileStream3.Write(array, , 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, , (int)fileStream.Length);
fileStream.Close();
string a = MD5Helper.MD5Buffer(array, , array.Length - );
string @string = Encoding.ASCII.GetString(array, array.Length - , );
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(, );
} /// <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 = ; 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(, );
} /// <summary>
/// 获得8位的MD5加密
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns></returns>
public static string GetMD58(string input)
{
return MD5Helper.GetMD532(input).Substring(, );
} /// <summary>
/// 移除MD5的前缀
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns></returns>
public static string RemoveMD5Profix(string input)
{
return input.Substring();
} /// <summary>
/// 验证MD5前缀处理的字符串有无被篡改
/// </summary>
/// <param name="input">输入字符串</param>
/// <returns></returns>
public static bool ValidateValue(string input)
{
bool result = false;
if (input.Length >= )
{
string input2 = input.Substring();
if (input.Substring(, ) == 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("-", "");
}
}

转:MD5辅助类的更多相关文章

  1. Java三行代码搞定MD5加密,测试5c短信网关的demo

    看到之前项目中,关于MD5加密的足足写了一个辅助类. 其实在Java中大部分都帮你实现好了,完成MD5加密,主要就三行代码: /** * 对字符串md5加密 * * @param str * @ret ...

  2. params关键字、工具辅助类与、加密与解密

    一.params关键字 在C#中如果给方法的参数加上关键字params则会形成可变参数,在传递时可以是0-n个对象. 示例: using System; using System.Collection ...

  3. C# Redis辅助类封装与简单聊天室的实现思路说明

    虽然redis api的功能比较齐全,但个人觉得为了更好的方便学习和使用,还是很有必有做一个类似DBHelper的帮助类 辅助类主要功能(代码会在最后放出来) 1. 事件监听: 重新配置广播时(主从同 ...

  4. .Net Core 最优 MD5 打开方式!初学者建议收藏(支持 SHA1,SHA256,.Net Framework)

    public static string GetMd5Hash(string input) { using (MD5 md5Hash = MD5.Create()) { // Convert the ...

  5. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

  6. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  7. [C#] 简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)

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

  8. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  9. android_m2repository_rxx.zip下载地址以及MD5

    地址 MD5 https://dl-ssl.google.com/android/repository/android_m2repository_r08.zip 8C8EC4C731B7F55E646 ...

随机推荐

  1. wordpress去掉<link rel='dns-prefetch' href='//s.w.org' />

    我们在用wordpress建站时经常会看到<link rel='dns-prefetch' href='//s.w.org' />,应该是为了从s.w.org预获取表情和头像,目的是提高网 ...

  2. String[]与List<String>的相互转换

    String[]转List String[] arr = new String[]{"a","b","c"}; List<String ...

  3. docker+jenkins的构建历史记录(Build History)时间不正确

    1.分别查看宿主机时间和容器时间 宿主机时间 root@fcaad17f146a:/# date Fri Jan :: CST 容器时间 [root@ ~]# docker exec -ti 8798 ...

  4. 20170811 使用Bootstrap框架写个页面

    采用Bootstrap-table 做的页面. 1. 增加Query 查询功能,涉及Ajax 来加载页面数据吧! <meta charset="UTF-8">  < ...

  5. Replication主要配置项

    八.Replication主要配置项(配置文件) 1.log_bin:指定binlog文件的名称,同时也表示开启binlog功能,在replication模式下,master上必须开启log_bin, ...

  6. Visual Studio使用Web Deploy远程发布网站及其配置

    https://blog.csdn.net/yzj_xiaoyue/article/details/60574378 废话不多说,直接进入正题(各个步骤请看图片的序号): IIS配置 1.打开服务器 ...

  7. Element-table-formatter格式化数据

    1.formatter  用来格式化内容   对table的值进行处理.Function(row, column, cellValue, index){}   使用formatter需要注意以下几点: ...

  8. java native方法及JNI实例 (转)

    转自:http://blog.csdn.net/xw13106209/article/details/6989415 1.参考文献: http://blog.csdn.net/youjianbo_ha ...

  9. C++的string

    string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,返回npos. string的substr(pos=0, count=npos)返回字符串[pos, pos+count ...

  10. C语言编程练习

    1.编程序实现求1-1000之间的所有奇数的和并输出. 解法1: int sum=0; for(int i=1;i<=1000;i++){ sum+=i%2?i:0; } printf(&quo ...