首先从md5说起,一般新进入开发行业最先接触的就是md5了,
md5本质上是一个hash(谐音:哈希)算法,可以从一个大文件信息中提取出一小段信息,叫提取摘要,
有的地方也有提取指纹这种说法,其实指纹这个比喻很好,

md5(原始数据) = 摘要

hash算法的目的:同样的一段数据通过hash函数总是得到相同的摘要,不同的数据通过md5总是应该
得到不同的摘要

为什么需要摘要:
一个很常见的使用场景是在会员系统上,网站为了安全一般不会存储用户的登陆密码,
那为我们在登陆的时候网站怎么知道我们的密码是对的呢?答案就是hash,比如你在
注册的时候密码填写的 123456,系统将你的密码进行hash,最后的结果可能是
e10adc3949ba59abbe56e057f20f883e,会员系统就是存的这一串字符,当你下次
登陆的时候,你输入123456,系统还是用原来那套hash算法,得出一串字符,和系统之前存
的字符串对比,如果一样,说明密码正确。

hash算法目的那一行有一个关键词“应该”,hash的目的是理想化的,不管什么hash算法实际
上总有特别小的概率会出现不同的原始数据通过hash函数可能会得到相同的结果,
所以:越好的hash算法会将这个概率降到越低
这个概率越低,黑客要通过手段碰撞出相同摘要的难度就越大
常见的md5他的安全性其实不高,黑客很容易就可以利用彩虹表进行md5碰撞来生成相同的摘要,

所以现在市面上的系统在使用md5的时候通常会有加盐操作,

md5(原始数据+salt) = 摘要

因为混入了salt,安全性进一步得到提升

细心的读者可能发现了,我上面一直说的摘要和哈希,并没有提到加密,那么md5属不属于加密呢?

由md5+salt 继续延伸一下其实就是 HS256 (Hmac + Sha256)
sha256和md5的功能一样,但是比md5更加安全

HS256(原始数据,key) = 摘要

这里的key就和salt作用相同
同样的问题,HS256属于加密吗?
答案是: 否,上面的都不属于加密,而是摘要,或者说指纹

什么叫加密,一个数据通过一个算法加密,可以通过相反的算法解密,而摘要只能单方向的
的’加密‘,不能逆向解密,所以不属于加密,但是摘要在某些情况下确实有加密的效果,
而且摘要和加密通常紧密结合,比如要对一个大文件
进行加密,但是这些加密函数都不支持这么大的文件,怎么办?这个时候就需要用hash函数先提取摘要,在
对摘要进行加密来达到同样的效果

最新文章

  1. Java设计模式 -- 基本原则
  2. acm 1002 算法设计
  3. 如何使用免费PDF控件从PDF文档中提取文本和图片
  4. Python自动化测试 (九)urllib2 发送HTTP Request
  5. solr+mongo-connector+mongdb+tomcat集成
  6. Decorator
  7. Octopus系列之js公共函数
  8. pip install 出现报asciii码错误的问题
  9. SD-WAN技术分析
  10. HDU 1098 Ignatius's puzzle(数学归纳)
  11. Andriod中自定义Dialog样式的Activity点击空白处隐藏软件盘(Dialog不消失)
  12. 整理关于web项目如何防止CSRF和XSS攻击的方法
  13. Automap sqlalchemy.ext.automap 自动映射数据库表结构
  14. Django URL (路由系统)
  15. 我写的python代码的规则
  16. 基于Spring Boot框架开发的一个Mock
  17. 习题集1b: 额外练习 (可选)
  18. JNDI数据源的配置
  19. jQuery webcam plugin
  20. SqlServer表和EXCEL数据互相复制方法

热门文章

  1. 【JZOJ6229】【20190621】san
  2. mybatis 获取新增数据的主键
  3. 38861cba61c66739c1452c3a71e39852.ttf net::ERR_ABORTED 404 (Not Found)
  4. JS和JQuery实现Button绑定键盘Enter事件实现提交
  5. 《JAVA程序设计》_第十周学习总结
  6. pdfBox 解析 pdf文件
  7. Unity内存优化之视频讲解
  8. gogs 邀请协作者 500错误
  9. Python之pandas读取mysql中文乱码问题
  10. LODOP条码二维码简短问答及相关博文