我们先说下hash这个词出现的场景。

编程语言里的数据类型:java里的hashmap, python里的哈希表 - dict
负载均衡:一致性哈希算法
文件和程序的版本管理:通过哈希值来判断
用户的密码:我的密码,网站有,会不会被偷?

以上的场景,覆盖了:开发的编码,服务的管控,版本的管理。贯穿于整个互联网项目的周期中。

hash是一系列的算法

特点:能给一大堆不规律的数据,给出长度固定的标签,这些标签的值分散的比较均匀。数据可以变成标签,标签没办法变成数据。

比如:从学校里随机抽取1000个学生,不论是从成绩,家庭收入来进行划分,他们大概率都会成正态分布。毕竟中庸的人最多,这就很不“hash”了。但如果按年纪、班级来分类,会比较平均。这就很”hash”了。

编程语言里的数据类型

因为它均匀分布的特性,就很适合用来做数据存储。

例如:有6个苹果,分别编号「2,27,125,234553,6635,9」要放进抽屉里,方便下次拿出,怎么给抽屉编号。方便拿到需要的苹果。典型的key与value的对应问题。

  • 最好的方式,按数值大小给抽屉编号,但是会有很大的空间浪费。比如2与27之间就会有二十几个空抽屉。
  • 另一种方式就是直接6个抽屉,放6个苹果,要拿多少号的苹果,就一个抽屉一个抽屉找。节约了抽屉,但是翻找东西的时候麻烦了。
  • 还有种方式就是 编码%10 来放苹果。那么 27号苹果在7号抽屉里。125号在5号抽屉里。6635号苹果,因为有冲突,要么也放到5号抽屉里挤一挤,挤不下则放在10+1=11号抽屉里。

这就是通过“hash”的方式来保证更方便的拿到苹果。

当然问题答案和问题在实际并不会如此简单因为数据是会有各种格式的,字符串,浮点…..

还有冲突的问题,两个一样的编号如何放置?每个苹果编码结尾数字都一样怎么办?

负载均衡

这里主要使用一致性哈希算法。还是之前6个编号号的苹果。按照之前的说法,有10个抽屉0-9就可以把这些苹果如下放到抽屉里

二:2,七:27,五:125,三:234553,五:6635,九:9

问题是我们只有一号,三号,八号三个抽屉。

解决方案是:“二:2”我们打算放到二号抽屉里,但是没有这个抽屉,就往后放到三号里面去。那么“五:125”就放到八号抽屉了。“九:9”的话到头了,我们就从头找起。找零号没有…一号,有,放进去。

这样就可以解决苹果放置的问题了。关键的问题是什么呢?如果八号突然没了。那八号的苹果拿出来,接着往后放,找九号抽屉,没有,零号抽屉也没有一号抽屉有,放进去。

这里的例子就是,分布式群集有多个节点,怎么通过键来确定数据存在哪个节点里了。

文件和程序的版本管理

更新系统的时候,我们能看到各种版本号,但是整个程序是有很多小小的部分组成的,哪个文件要不要用新的怎么确认?

假如是分布式系统里,一个服务要分发到多个机器上,更新的时候怎么确定哪些文件要被更新。

有几种方式:

  • 看时间戳,旧的就不要,全用新的。那么问题就是有的旧文件其实还能用。
  • 看版本号,低于这个版本就不要。问题也差不多,版本号低,但是内容有可能一样,覆盖也只是换个名字,没必要。
  • 看文件的hash值。这个hash值,是通过文件内容,很快速的算出来的一个值,内容一样,hash值就一样。只要hash值不同,就说明文件不同,那就更新掉。

可以理解为,是一种很极致的压缩方式,可以把1个G的文件,压缩成32位的数字。但是没办法解压…如同一辆压成铁砣的特斯拉…..这里的hash值,可能是SHA1,SHA2、MD5…这些不同的算法算出来的。

Python的版本控制也开始使用hash值了。
详见《PEP 552 -- Deterministic pycs》 https://www.python.org/dev/peps/pep-0552/

用户的密码

  • 我的某宝账号,里面有几十万,密码会不会被里面的员工偷偷看了?
假如密码是123456,数据库里是存的是它的哈希值“ea8a706c4c34a168”。
这样别人就没办法从数据库里看到你的密码了。
有的网站觉得不安全,会存123456+”特定字符串”的方式在算出哈希值。
那么你的密码可能就变成了“41630d269546335f”。
有人拿到这串字符也猜不出你的密码是123456,是不是觉得安全一些了。

  • 某某站点xx万用户信息泄露,用户密码被公开。
假如你的密码真是123456,发生这种事情,你的密码会很不安全。
因为你的密码太简单了。会被暴力破解,所谓暴力破解就是一个一个常用密码来试。
如果你的密码够复杂,就算信息泄露,你的密码仍然会很安全。
这就是为什么现在的网站都有密码复杂度的提示。

不信的人可以试试破解下“ba34275de232a490”

发送“hash”获取以上字符串的原文。

更多有趣内容敬请关注“码农在中年”公众号 ⬇️

获取文件哈希值_哈希(hash)是个啥?相关推荐

  1. ruby 生成哈希值_哈希== Ruby中的运算符

    ruby 生成哈希值 In the last article, we have seen how we can compare two hash objects with the help of &l ...

  2. ruby 生成哈希值_哈希 Ruby中的运算符

    ruby 生成哈希值 In the last article, we have seen how we can carry out a comparison between two hash obje ...

  3. python中的content方法_content最新:python计算Content-MD5并获取文件的Content-MD5值方式_爱安网 LoveAn.com...

    关于"content"的最新内容 聚合阅读 这篇文章主要介绍了python计算Content-MD5并获取文件的Content-MD5值方式,具有很好的参考价值,希望对大家有所帮助 ...

  4. golang 获取文件的MD5值

    golang 获取文件的MD5值 调用下面的函数(输入参数是文件的路径,如/home/user/test.txt),即可获取指定文件的MD5值. func GetFileMD5(pathName st ...

  5. JAVA 获取文件的MD5值大小以及常见的工具类

    1 /** 2 * 获取文件的MD5值大小 3 * 4 * @param file 5 * 文件对象 6 * @return 7 */ 8 public static String getMD5(Fi ...

  6. c++判断文件是否被修改(获取文件的MD5值)

    需求分析 因为项目中需要检测一个文件是否被篡改,我采用了监测文件的MD5值. MD5,简单地来说,就是文件的"指纹".如果原始文件被修改了,那么MD5值也就会跟着发生变化,所以我们 ...

  7. python如何计算Content-MD5并获取文件的Content-MD5值

    1.首先计算MD5加密的二进制数组(128位),然后再对这个二进制数组进行base64编码(而不是对32位字符串编码). 例如,用Python计算0123456789的Content-MD5,主要代码 ...

  8. 获取文件哈希值_关于哈希的一切,都在这里了

    前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥. 上一节,我们一起学习了,在Java中如何构建高性能队列,里面牵涉到很多底层的知识,不知 ...

  9. 获取文件哈希值_图解:什么是哈希?

    为什么要有哈希? 假设我们要设计一个系统来存储将员工手机号作为主键的员工记录,并希望高效地执行以下操作: 插入电话号码和相应的信息.(插入) 搜索电话号码并获取信息.(查找) 删除电话号码及相关信息. ...

  10. 获取文件哈希值_浅谈查找---哈希查找

    在上一篇综述中,我给出了排序是为了更快的查找这个观点.也介绍了查找的一些典型应用场景如: 1.判断一个给定值,是否在一个数组 2.mysql 的查询优化 3.再到给定a.b两个文件,各存放50亿个ur ...

最新文章

  1. html 地图 自动适应,Html显示地图
  2. 摸鱼上招聘网站的小伙伴们注意了!监控系统可能已经把你设为“离职高危”......
  3. VS Web.config 密码加密加密
  4. windows的常用快捷键(实用篇)
  5. jzoj1282-资源勘探【统计】
  6. 2寸的照片长宽各是多少_贵州公务员考试照片尺寸要求是多少
  7. PTA-6-3 使用函数的选择法排序 (25分)(C语言)
  8. 远程密钥登陆linux系统(putty、xshell)
  9. Python绘制KS曲线
  10. shell脚本for循环_了解Shell脚本中的for循环
  11. android 权限
  12. Mavan学习之pom聚合
  13. 小用lambda表达式,查询数组里大于80的个数
  14. node.js读取JSON文件
  15. K-近邻算法学习总结
  16. 各种学习资料库,非常好的收藏汇总!!!!!
  17. mac无法连接服务器无法定位当前位置,mac book pro 无法定位
  18. 机器学习(一)PR曲线和ROC曲线
  19. 【bWAPP】XSS通关记录
  20. 系统流程图,数据流程图和Ipo图的介绍

热门文章

  1. 漫漫人生录 | 一个月薪 120000 的[ 北京 ] 程序员的真实生活
  2. 手机平板功放芯片BCT8933,PINtoPIN替换AW8733
  3. 实验五 八段数码管显示(红绿灯)
  4. 国内有哪些小众但很有意思的网站?这6个网站值得收藏
  5. matlab正方形追及问题,行测常考题型讲解:环形相遇与追及问题
  6. Amap【高德】/Google-开发,无人机航迹规划演示
  7. LTE CQI优化提升方法
  8. Spring框架基础(上)
  9. 中国17家创业公司的失败史
  10. 查找表字段-事务码 AUT10