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. 1-2-编译U-boot

    1-2-编译U-boot 1.su+enter进入超级用户模式. 2.cd /mnt/+两次Tab去到根目录,ls显示共享文件夹里的文件. 3.解压tar xvfj uboot_TQ210_1.3.4 ...

  2. SectionList的使用

    这个是效果: 第一步:准备数据源:Car.json {"data": [ { "cars": [ { "icon": "m_180 ...

  3. 数字转换大写人民币的delphi实现

    function TForm1.changeRmb(const strRmb:string):string; var txt,strhighlevel:string; i,n,m,ilen,ipos: ...

  4. PXE安装操作系统

    TFTP服务 用PXE安装操作系统依赖于DHCP服务和TFTP服务 网卡一般都内置的TFTP客户端的程序 systemctl enable tftp     systemctl enable  dhc ...

  5. 客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!

    相信一些玩主板超频的人都知道,给CPU加电压能够提升CPU的处理速度,很多超频爱好者通过采购超频性能较好,且价格较低的主板和CPU来玩超频,并且通过一些参数的问题能让屌丝设备发挥出高富帅的性能.但是玩 ...

  6. vue axios get请求参数为json对象 而非字符串形式

    axios get请求方式 传递给后台的参数都是字符串下形式,无法传递json对象 或数组对象等    post请求方式则可以实现,   但若后台接口要求必须用get方式传递对象给后台,需要装插件,实 ...

  7. 【LeetCode每天一题】Valid Parentheses(有效的括弧)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  8. Go cookie

    Web状态,对于我们从c/c++转过来的人来说还是很重视的啊 但,如何用好cookie来让我心顺畅,目前还是有点障碍 可能是我没能完全理解cookie 但是,如果由浏览器客户端决定自己绑定那个cook ...

  9. Selenium基础知识(十)截屏

    自动化测试过程中,经常会用截图的方式,更直观的显示展示错误信息:selenium截图的三种方式: driver.get_screenshot_as_file(r'd:\selenium.png') # ...

  10. 28.json数组,select选择,input输出对应数据

    效果:选择对应的车类,下面的input会实时出现车价. html: <form action="" class="priceModelform1"> ...