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. springMVC(二): @RequestBody @ResponseBody 注解实现分析

    一.继承结构 @RequestBody.@ResponseBody的处理器:RequestResponseBodyMethodProcessor @ModelAttribute处理器: ModelAt ...

  2. 【Jmeter】if控制器+循环控制器+计数器,控制接口分支

    但是我不想这么做,接口只想写一次,让循环控制器和if控制器去判断接口,执行我想要的分支.这里遇到了一个问题,if控制器通过什么去判断接下来的分支?我引入了一个计数器的概念.起始值为0,每次循环加1,将 ...

  3. InnoDB表回收空间

    当innodb_file_per_table设置为OFF,那么所有数据将被存储在ibdata文件.如果删除一些数据和删除一些表则没有回收未使用的磁盘空间,除了导出表然后再导入的方法来回收表空间大小,除 ...

  4. android TableLayOut画表格

    <TableRow android:layout_width="match_parent" android:layout_height="wrap_content& ...

  5. MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves)

    MySQL的并行复制多线程复制MTS(Multi-Threaded Slaves) http://www.tuicool.com/articles/m2Unmeq 姜承饶 简称MTS:基于binlog ...

  6. 并发编程---IO模型

    IO模型 任务的提交方式有两种: 同步:应用程序提交完任务,等待结果结果,之后在执行下一个任务 异步:应用程序提交完任务,继续执行不等待结果,任务执行完,会自动出发异步中的会带哦函数 同步不等于阻塞: ...

  7. Response实例

    Response部分方法介绍及实例 客户端浏览器每访问一次web服务器的页面都会提交一次请求,与request对象对应的是response对象,该对象可以用来对客户的请求做出响应,向客户端发送数据.输 ...

  8. HTTPS流程

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...

  9. 从现在开始,这是一个IT博客。

    从现在开始,删除以前的点点滴滴,一心做个IT人.

  10. Boost学习-Linuxidc上的很好的学习资料

    来自 http://www.linuxidc.com/Linux/2011-07/39215.htm,拷贝第一页如下 Boost学习系列 简介及基本用法 [日期:2011-07-25] 来源:Linu ...