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. shell- 字符串处理 、 扩展的脚本技巧 、 正则表达式

    字符串截取的方法 方法一:使用${}表达式 格式:${var:起始位置:长度} 方法二:使用expr substr 格式:expr substr "$var" 起始位置 长度 方法 ...

  2. 报错解决——make: *** No targets specified and no makefile found. Stop

    wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz tar zxvf ncurses-5.6.tar.gz #切换目录到ncurses ...

  3. 010-ThreadGroup线程组

    线程组ThreadGroup表示一组线程的集合,一旦一个线程归属到一个线程组之中后,就不能再更换其所在的线程组.那么为什么要使用线程组呢?个人认为有以下的好处:方便统一管理,线程组可以进行复制,快速定 ...

  4. python文件的md5加密方法

    本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...

  5. http://lib.csdn.net/article/reactnative/40118

    http://lib.csdn.net/article/reactnative/40118 ES6学习笔记(四)--数值与数组 作者:SirM2z 数值的扩展 Number.isFinite(), N ...

  6. Ngx_Lua使用分享

    2017年04月22日 20:05:21 阅读数:430 Nginx_Lua 1.1. 介绍 1.2. 安装 1.2.1. 安装JIT平台 1.2.2. NDK与Lua_module 1.2.3. 编 ...

  7. linux系统中CST与EDT时间转换

    初始时间:2012年 09月 14日 星期五 18:15:33 EDT [root@test ~]# mv /etc/localtime /etc/localtime.bak [root@test ~ ...

  8. [转]记解决一次“HTTP Error 400. The request URL is invalid”的错误

    今天将图片服务切到使用了cdn的机器上面去,然后就部分图片报如下图错误“HTTP Error 400. The request URL is invalid” 看到这种错误信息,一般的开发者心中可能会 ...

  9. 用xshell 连接docker Linux服务器

    用xshell 连接docker Linux服务器

  10. 3.十分钟搞定Vue搭建

    Vue推荐开发环境 Node.js 6.2.0.npm 3.8.9.webpack 1.13.vue-cli 2.5.1.webstrom2016 现在开始安装环境 安装nodejs 可以在终端里下载 ...