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. 3.1-uC/OS-III的特点:

    1.C/OS-III是一个可扩展的, 可固化的, 抢占式的实时内核, 它管理的任务个数不受限制. 它是第三代内核, 提供了现代实时内核所期望的所有功能包括资源管理.同步.内部任务交流等. uC/OS- ...

  2. 如何修改帝国cms文章点击量默认值和成倍增加

    我们在帝国cms发布完文章,在不点击的情况下,“点击量”默认显示为0,请问有什么方法,修改关注默认值吗?这个可以在增加信息时,“特殊属性”标签里修改点击量,如下图 有朋友问有没其他好的方法快速增加.成 ...

  3. ITouch在xcode下提示‘No such file or directory, at ‘/SourceCache/DVTi...'

    版权声明:本文为博主原创文章,转载或又一次发表请先与我联系. https://blog.csdn.net/jonahzheng/article/details/37692733       用一个台老 ...

  4. PowerTCP FTP for .NET 在线e文文档

    http://www.dart.com/help/ptftpnet/webframe.html

  5. vue 上传图片 input=file

    一.逻辑 点击li触发事件chooseImage 即触发input标签事件photoChange input标签事件photoChange file返回的是如下变量 模拟上传表单方法 执行上传 二.代 ...

  6. Cartographer源码阅读(3):程序逻辑结构

    Cartographer早期的代码在进行3d制图的时候使用了UKF方法,查看现有的tag版本,可以转到0.1.0和0.2.0查看,包含kalman_filter文件夹. 文件夹中的pose_track ...

  7. 解决bug感觉

    解决bug,没有思路,很烦躁: 时间过去好久,还是没头绪,没结论: ...... ...... ...... ...... ...... 过了好久,这样还不如冷静下来,按照正确的方法(review代码 ...

  8. JMeter TCP性能测试

    jmeter是一款纯java的性能测试工具,跨平台运行方便.提供图形化界面设置.简单易用.     在性能测试方法论中,很典型的方法就是二八原则,量化业务需求. 二八原则:指80%的业务量在20%的时 ...

  9. vue中兄弟组件间 的传值 bus(可以理解为公共交通)

    点击大儿子(头部组件的年月日,下面的都要变化) 就相当于点击了年月日之后,下面的组件重新调接口,参数变化       1.首先随便哪儿写个bus.js 内容如下: import Vue from 'v ...

  10. Mysql自增ID起始值修改

    在mysql中很多朋友都认为字段为AUTO_INCREMENT类型自增ID值是无法修改,其实这样理解是错误的,下面介绍mysql自增ID的起始值修改与设置方法.通常的设置自增字段的方法:创建表格时添加 ...