hash 的简单概述
奥.自己百度去吧 百度比我说的详细.
咱们在这介绍一下 hash 的特点
注意看啊 重点来了
1.算法是公开的(怎么算的不重要,腻友不是数学家)
2.对相同数据运算,得到的结果是一样的
3.对不同数据运算,如MD5得到的结果默认是128位,32个字符(16进制标识)
4.逆运算的可能约等于0
5.可称之为信息指纹,是用来做数据识别
hash (MD5)加密的用途
1.用户密码的加密
比如客户端用户密码设置为 123456 ,通过 MD5加密的结果是e10adc3949ba59abbe56e057f20f883e
然后把这个e10adc3949ba59abbe56e057f20f883e发送给服务器,服务器储存的就是e10adc3949ba59abbe56e057f20f883e . 这个时候就算服务器被攻击,数据库泄露,别人拿到的也是一段加密后的结果.是不是这样就安全了
觉得安全了的同学罚站半小时. 看特点 ,上述第二条, 对相同数据运算,得到的结果是一样的!
这个意思就是说. 通过穷举字符组合的方式,创建了明文密文对应查询数据库,创建的记录约90万亿条,占用硬盘超过500TB! 这些都是 MD5加密前和加密后的数据!
看吧. 一些常用或者常规通过 MD5加密已经可以通过第三方直接查询的到了
既然 MD5这么不安全,为什么这种加密还如此风靡 . 咱们接着往下看
这个时候有经验的同学应该知道怎么办了.有一种 md5的保护.叫加盐
什么是加盐呢 .举个栗子 用户的密码是123456吧. 这在程序里是个字符串吧.字符串拼接大家都会吧 比如用户密码后边都拼接一个 handsomezuyu. 哎? 试试看
123456handsomezuyu md5 后的结果是9a9a83b884f51deb88944461075dc538
咱们在用这个结果去解密试试
这个handsomezuyu就是盐了. 当然盐也可以是coolzuyu 也可以是excellentzuyu 也可以是 goodzuyu. 都可以都可以.
查不到了吧. 厉害了吧. 可以了吧.这招还行吧. 既简单又实用.都学会了吧.
(注意一下这个方法的缺点.参与这个项目的人都知道这个盐的值吧.那么如果有一天某位参与这个项目开发的同事因为在聚餐的时候放了个屁被开除了.额.... 是吧.那他如果想搞事... 好了.当然也有避免这种情况发生的措施,咱们这篇闲聊中先不讲.)
2.搜索引擎
嗯?这个时候可能有些小可爱就要问了.搜索引擎?哈希?
咱们就简单说一下搜索引擎与哈希的关系
比如你百度搜 "帅逼 zuyu" 和" zuyu 帅逼" 这两个关键词
出现的结果如果没有"帅逼 zuyu"直接关联的内容.那么搜索过后呈现的内容是一样的
因为搜索时引擎会拆词 ,关键字会被拆成" 帅逼 "和"zuyu"两个词 .然后得到两个词的哈希值.然后在对位相加. 无论顺序是怎么样的.对位相加后的结果都一样吧!所以就会出现了我上边说的内容一样的现象. 当然这只是一小部分关系,里边还有很多更复杂的算法和逻辑.这儿咱们就不一一标出了(呵呵,我也不知道)
3.版权/云盘
唉?版权?有点懵?版权还能和hash有关系?
咱们就先说说版权.比如腾讯视频上. 你拍了一段视频然后上传 ,紧接着上传成功 .这个时候腾讯视频就记录下了这个视频的 hash值.并且认定这个版权是你的. 其他人在上传相同的视频之后就会提示该视频已存在等类似的提示信息(如果你通过下载或者修改格式等各方便因素影响.即使视频内容完全一样, hash 值也有可能不同)
那云盘呢.云盘和 hash 有啥 关系呢.
举个栗子奥.百度云大家应该都用过对吧,而且你不仅用过,你用来干嘛我也知道.嗯,看懂这句话的都是同道中人. 好.咱们说回原题. 你们上传一些学习资料的时候有没有遇到过一种现象呢?
不是和谐啊! 不是和谐! 不是和谐!!!
秒传! 对吧 .一个挺大的文件 就秒传上去了.这就是和 hash的关系了. 百度云盘在你上传某国学习资料的时候,会先去拿到你这个文件对应的 hash 值. 如果云盘服务器就会做一个 hash 值的对比 .如果 hash 只能匹配的到,那就是服务器有相同的数据. 然后服务器只不过就是在你的账号里加了一条数据而已 .并不是真的把这个学习资料传上去. 当你下载一些学习资料的时候或者上传一些学习资料的时候 . 也遇到过提示你这个学习资料因为某种原因不可以下载了吧. 是吧.也是这个道理.
所以阿.这个时候知道原理了.那是不是就是可以避免一些不开心的事情了(压缩会改变 hash 值.修改文件名字不会改变 hash 值.翻录或者剪辑视频会改变 hash 值) 好 ,刹车.
来,回想一下, 我上边说特点. 第五条 可称之为信息指纹,是用来做数据识别. 理解了吧
至于特点的第一条. 算法是公开的 .咱们了解就好
至于特点的第三条.对不同数据运算,如MD5得到的结果默认是128位,32个字符(16进制标识)到更像是一种规则
至于特点的第四条.逆运算的可能约等于0 .简单解释一下就是说目前人们所熟知的知识范畴内 hash 就是不可逆运算