散列法提供了一种单向加密的方式。这种方式非常适用于在数据库中存储密码。因为我们无须(也不希望)提供解密的信息。在登录验证时,只需简单地将用户的输入进行散列,并和数据库中存储的散列值进行比较即可。

由于散列码的长度不会随着源数据的长度而变化,因此可用于文件比较和数据流错误检查(和校验码非常类似)。源数据中任意一个位的变化都能够使散列码发生巨大的变化。

HashAlgorithm子类(例如SHA256或者MD5)的ComputeHash方法可以用于生成散列码:

获取文件的MD5

byte[] hash;
using (Stream fa = File.OpenRead("text_file1.txt"))
{hash = MD5.Create().ComputeHash(fa);
}

对字符串进行SHA256加密

byte[] data = System.Text.Encoding.UTF8.GetBytes("this is a password");
byte[] hash256 = SHA256.Create().ComputeHash(data);

Encoding类的GetBytes方法将会把字符串编码为字节数组;而Get-String方法则会执行反向操作。但是Encoding类无法将一个加密或者散列之后的字节数组转换为字符串,因为这种数据往往会包含违反编码规则的数据。如果需要将字节数组转换为合法的(且XML友好的)字符串,或执行相反操作,请分别使用Convert.ToBase64String和Convert.From-Base64String。

MD5和SHA256是.NET Framework中从HashAlgorithm派生的子类。以下以升序按照安全等级列出了常用的散列算法:

MD5(16)->SHA1(20)->SHA256(32)->SHA384(48)->SHA512(64)

算法的长度越短运算的速度越快。MD5的运算速度比SHA512快20多倍,因此非常适用于计算文件的校验和。MD5算法可以每秒钟加密数百兆字节的数据,并将其存储在一个Guid中(Guid恰好也是16字节长,并且作为一个值类型比字节数组更易于处理。例如,我们可以直接用相等运算符比较两个Guid的值。)但同时,越短的散列算法发生碰撞(两个不同的文件会生成相同的散列码)的概率越大。

如果要存储密码或其他高安全等级的敏感数据,请至少使用SHA256。MD5和SHA1在这种情形下是不安全的。MD5和SHA1仅适用于防止意外的破坏,而无法防御故意的篡改行为。

SHA384执行速度并不比SHA512快,因此如果需要获取比SHA256更高的安全性,可以使用SHA512。较长的SHA算法可以用于密码的散列。但是它们需要强制采用高密码强度的策略来防范字典攻击的威胁(字典攻击指攻击者对字典中的每一个词进行散列,创建一个密码查找表的攻击策略)。还可以通过重复散列的方式来加长密码散列值的长度,从而提供更强的保护。例如,如果重复进行100次散列,则使用字典攻击需要花费1个月来破解的密码现在需要8年才能够破解。Rfc2898DeriveBytes和PasswordDeriveBytes类恰好提供了上述功能。

另一种防止字典攻击的技术是在加密过程中引入salt“盐”,即由随机数生成器生成的一长串字节,并在散列之前将其并入密码中。这样做可以通过两种途径来对抗攻击者:

1、这需要更长的计算时间,

2、攻击者无法访问“盐”字节的值。

此外,Framework还提供了160位的RIPEMD散列算法。这种算法的安全性比SHA1稍好,但受制于.NET对该算法的低效实现,它的执行速度比SHA512还慢。

c#加密:二、散列法 MD5、SHA256、SHA512相关推荐

  1. 通俗解释对称加密、非对称加密、散列算法与PKI

    这是我前些年写在51的,现在转过来,其实是CISSP的学习笔记,用自己的语言组织起来的,用通俗的话说明对称加密.非对称加密.散列算法.PKI(CA)到底都是干啥的.OK,进入主题: 密码学要解决的问题 ...

  2. 哈希表(Hash Table)及散列法(Hashing)

    bigshuai 哈希 源地址 http://www.cnblogs.com/bigshuai/articles/2398116.html 哈希表(Hash Table)及散列法(Hashing) 数 ...

  3. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)...

    2019独角兽企业重金招聘Python工程师标准>>> 数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们----帕蒂.道格.苏珊-- ...

  4. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)

    数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们--帕蒂.道格.苏珊--每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4 ...

  5. 散列表相关题目(线性探测再散列法)

    散列表相关题目(线性探测再散列法) 一.题目 将关键字序列(7.8.30.11.18.9.14)散列存储到散列表中.散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(key×3) ...

  6. 数字签名、数字证书、对称加密算法、非对称加密算法、单向加密(散列算法)——Web网络系列学习笔记

    数字签名是什么? 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给他的朋友们--帕蒂.道格.苏珊--每人一把. 3. 苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4 ...

  7. Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。

    密码学综合工具 前言 git网址 项目结构 项目预览 String与byte[]互转 通过`String`类转换 通过`Base64`互转[jdk-8] 前言 我们网络信息安全的实验...要我们找各种 ...

  8. 数据结构记录--散列法实验

    Home Web Board ProblemSet Standing Status Statistics Problem A: 散列法的实验 Time Limit: 1 Sec  Memory Lim ...

  9. 哈希(散列):(四)C语言实现 哈希 开散列法

    哈希(散列)的概念: https://blog.csdn.net/mowen_mowen/article/details/82943192 C语言实现:静态哈希表: https://blog.csdn ...

最新文章

  1. 封闭不能外出怎么办?阳台派对了解下!
  2. [NCTF2019]Reverse
  3. python数据类型基础与解压缩
  4. MySQL建表字段长度的限制、汉字和字母占字节数
  5. Oracle安装出现报错
  6. php经过twemproxy无法delete后端memcache值的解决方法
  7. Excel数据分析实例
  8. wifi频谱仪测试软件,无线局域网频谱分析仪 (Spectrum XT)
  9. 无人机倾斜摄影三维建模
  10. win10 移动硬盘“拒绝访问”解决方案
  11. 项目中的“里程碑”就是我们常说的里程碑吗?
  12. python明文密文_「每日一练」Python实现明文和密文的输入
  13. 刘严涛一枚天蝎座的在读大学生
  14. python 读取gif_2020-09-11 python 读取gif文件并简单添加文字
  15. VS2005中使用Qt4.8.5遇到的问题
  16. 龙芯3A4000处理器解读①
  17. 内存的分配与回收实验
  18. Windows VScode Linter pylint is not installed
  19. 一文读懂射频器件业未来发展与趋势
  20. 数位、位数与计数单位的区别

热门文章

  1. 【转】免费进入学术数据库
  2. 怎么开发联机小游戏_微信小游戏创意大赛火热进行中,小游戏联机对战引擎免费用...
  3. 从零到一学爬虫-爬取微博热搜示例
  4. stm32cubeide烧写程序_STM32Cube工具,覆盖开发全过程(一)
  5. SEO中的简单代码优化
  6. 内存数据网格IMDG简介
  7. eNSP 路由远程登录
  8. 旷视科技 CVPR部分文章
  9. Windows 微信双开(批处理)
  10. .doc文档无法设置默认打开方式