HashHelper
在C#中,数据的Hash以MD5或SHA-1的方式实现,MD5与SHA1都是Hash算法,MD5输出是128位的,SHA1输出是160位的,MD5比SHA1快,SHA1比MD5强度高。
MD5与SHA1的比较:
1)对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
2)对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
3)速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
SHA-1和MD5在C#中的实现:
- public class HashHelper
- {
- /// <summary>
- /// 计算文件的 MD5 值
- /// </summary>
- /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
- /// <returns>MD5 值16进制字符串</returns>
- public static string MD5File(string fileName)
- {
- return HashFile(fileName, "md5");
- }
- /// <summary>
- /// 计算文件的 sha1 值
- /// </summary>
- /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
- /// <returns>sha1 值16进制字符串</returns>
- public static string SHA1File(string fileName)
- {
- return HashFile(fileName, "sha1");
- }
- /// <summary>
- /// 计算文件的哈希值
- /// </summary>
- /// <param name="fileName">要计算哈希值的文件名和路径</param>
- /// <param name="algName">算法:sha1,md5</param>
- /// <returns>哈希值16进制字符串</returns>
- private static string HashFile(string fileName, string algName)
- {
- if (!System.IO.File.Exists(fileName))
- {
- return string.Empty;
- }
- System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
- byte[] hashBytes = HashData(fs, algName);
- fs.Close();
- return ByteArrayToHexString(hashBytes);
- }
- /// <summary>
- /// 计算哈希值
- /// </summary>
- /// <param name="stream">要计算哈希值的 Stream</param>
- /// <param name="algName">算法:sha1,md5</param>
- /// <returns>哈希值字节数组</returns>
- private static byte[] HashData(System.IO.Stream stream, string algName)
- {
- System.Security.Cryptography.HashAlgorithm algorithm;
- if (algName == null)
- {
- throw new ArgumentNullException("algName 不能为 null");
- }
- if (string.Compare(algName, "sha1", true) == )
- {
- algorithm = System.Security.Cryptography.SHA1.Create();
- }
- else
- {
- if (string.Compare(algName, "md5", true) != )
- {
- throw new Exception("algName 只能使用 sha1 或 md5");
- }
- algorithm = System.Security.Cryptography.MD5.Create();
- }
- return algorithm.ComputeHash(stream);
- }
- /// <summary>
- /// 字节数组转换为16进制表示的字符串
- /// </summary>
- private static string ByteArrayToHexString(byte[] buf)
- {
- return BitConverter.ToString(buf).Replace("-", "");
- }
- }
参考:http://blog.rdiframework.net/article/222
HashHelper的更多相关文章
- 【开源】OSharp框架解说系列(3):扩展方法
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 关于WEB Service&WCF&WebApi实现身份验证之WebApi篇
之前先后总结并发表了关于WEB Service.WCF身份验证相关文章,如下: 关于WEB Service&WCF&WebApi实现身份验证之WEB Service篇. 关于WEB S ...
- 哈希(Hash)与加密(Encrypt)相关内容
1.哈希(Hash)与加密(Encrypt)的区别 哈希(Hash)是将目标文本转换成具有相同长度的.不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的.可 ...
- Hash MD5 CRC 知识
本文旨在科普安全相关的知识,并附一个C#实现的文件管理工具. Hash 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的五种安全 ...
- .NET(C#) File类的常用方法
MSDN的File类 File类在MSDN:https://msdn.microsoft.com/zh-cn/library/system.io.file_methods(v=vs.110).aspx ...
- 哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
0.摘要 今天看到吉日嘎拉的一篇关于管理软件中信息加密和安全的文章,感觉非常有实际意义.文中作者从实践经验出发,讨论了信息管理软件中如何通过哈希和加密进行数据保护.但是从文章评论中也可以看出很多朋友对 ...
- C# 计算文件的 Hash 值
/// <summary> /// 提供用于计算指定文件哈希值的方法 /// <example>例如计算文件的MD5值: /// <code> /// String ...
- C# 计算字符串/文件的哈希值(MD5、SHA)
原文 C# 计算字符串的哈希值(MD5.SHA) 已做修改 一.关于本文 本文中是一个类库,包括下面几个函数: /// 1)计算32位MD5码(大小写):Hash_MD5_32 /// 2)计算16位 ...
- C# 计算文件的HASH
/// <summary> /// 提供用于计算指定文件哈希值的方法 /// <example>例如计算文件的MD5值: /// <code> /// String ...
随机推荐
- element-admin中echarts图标宽度无法修改
默认示例 <template> <div> <el-row :gutter="0"> <el-col :xs="24" ...
- MySQL基于报错注入1
0x1 判断注入点: http://www.xxxx.ro/s.php?id=1' 那么尝试闭合下单引号 http://www.xxxx.ro/s.php?id=1' --+ 0x2 枚举下表的列 h ...
- [转]JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/05/2038331.html java application项目(非web项目) 改进前: ...
- 5-6 可视化库Seaborn-Facetgrid使用和绘制多变量
基本工作流程是FacetGrid使用数据集和用于构造网格的变量初始化对象.然后,可以通过调用FacetGrid.map()或将一个或多个绘图函数应用于每个子集 FacetGrid.map_data ...
- Shell命令-系统信息及显示之df、top
文件及内容处理 - df.top 1. df:报告文件系统磁盘空间的使用情况 df命令的功能说明 df 命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. df命令的语法格式 df [O ...
- Kettle 执行SQL脚本
以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 本文将对Kettle5中常用步骤字段选择(又名选择/改名值,英文原名:Select Values)进行详细解释.这个步骤的功能非常强大, ...
- 深度自编码器(Deep Autoencoder)MATLAB解读
深度自编码器(Deep Autoencoder)MATLAB解读 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 这篇文章主要讲解Hinton在2006 ...
- js 时间戳转yyyy-MM-dd HH-mm-ss工具类
转载自:https://blog.csdn.net/shan1774965666/article/details/55049819 在web开发中,我们经常需要用js将时间戳转yyyy-MM-dd H ...
- react解析markdown文件
当当当又get到了一个新技能,使用react-markdown来直接解析markdown文件(咳咳,小菜鸟的自娱自乐) 项目中遇到了一个API的那种展示方式,类似于入门手册啥的那种,如果是一个个调用接 ...
- RedisTemplate操作Redis(spring-data-redis)
参看博客:https://www.cnblogs.com/songanwei/p/9274348.html 使用文档:StringRedisTemplate+RedisTemplate使用说明