什么是哈希?

hash,一般翻译为散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间。

它其实就是一个算法,最简单的算法就是加减乘除,比方,我设计个数字算法,输入+7=输出,比如我输入1,输出为8;输入2,输出为9。

哈希算法不过是一个更为复杂的运算,它的输入可以是字符串,可以是数据,可以是任何文件,经过哈希运算后,变成一个固定长度的输出,该输出就是哈希值。但是哈希算法有一个很大的特点,就是你不能从结果推算出输入,所以又称为不可逆的算法。>>> hash('我爱你')

3471388576844338423

如上所示,输入“我爱你”三个字,经过哈希运算后,会得到一个随机数列,而且不管你的输入文件多大,最后得到的结果都是这么一个固定长度的数列,即使你输入的是一部电影,输出也是这么大。而且通过数列不能推导出输入。

哈希特性

不可逆:在具备编码功能的同时,哈希算法也作为一种加密算法存在。即,你无法通过分析哈希值计算出源文件的样子,换句话说:你不可能通过观察香肠的纹理推测出猪原来的样子。

计算极快:20G高清电影和一个5K文本文件复杂度相同,计算量都极小,可以在0.1秒内得出结果。也就是说,不管猪有多肥,骨头多硬,做成香肠都只要眨眨眼的时间。

哈希的用途

哈希算法的不可逆特性使其在以下领域使用广泛:

(1)密码,我们日常使用的各种电子密码本质上都是基于hash的,你不用担心支付宝的工作人员会把你的密码泄漏给第三方,因为你的登录密码是先经过 hash+各种复杂算法得出密文后,再存进支付宝的数据库里的。

(2)文件完整性校验,通过对文件进行hash,得出一段hash值 ,这样文件内容以后被修改了,hash值就会变。 MD5 Hash算法的"数字指纹"特性,使它成为应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

(3)数字签名,数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

此外,hash算法在区块链领域也使用广泛。

基于hash的数据类型有哪些?

Python 中基于hash的2个数据类型是dict and set , 之前说dict查询速度快,为何快? 说set天生去重,怎么做到的?其实都是利用了hash的特性,我们下面来剖析

dict 为何查询速度超快,且不受dict大小影响?

解析:假设我要存14亿人的基本信息data = {

"张三":[23742364782642342323234,28,"山东济南"],

"李四":[12124234232311214458271,25,"北京昌平"],

"王五":[23030293483727384383929,33,"山东济南"],

"赵六":[42302033030302482634674,28,"河北保定"],

# "alex":["xxxx"],

# "黑姑娘":["xxxx"]

# ...

}

dict 的每个key 都要先经过hash生成一段固定长度的hash值,假设生成的hash值如下:

dict会把这些数字按大小排序好放在一个列表里kd = [-10, 53, 67, 81, 99, 123]

当我们想查找"赵六"的信息时, 会把“赵六”先hash, 得到99这个值,然后拿这个值去到kd列表里找,想象这个列表有14亿个值 ,如何快速找到99? 二分法就行,具体看剖析视频。

只要找到了99的位置,就可以定位到赵六对应的value的值了。 通过2分法查找,每次数据量都会少一半,这样查找最多31次(2**31=2147483648)就能从20亿信息里找到这个人的信息。

当然 dict 真实的查找算法比这个还要复杂些, 我只是通过这个例子让大家理解下为何基于hash的数据类型查找速度会快很多。

set为何是天生去重的?

因为每存一个值到set里时, 都要先经过hash,然后通过得出的这个hash值算出应该存在set里的哪个位置,存的时候会先检查那个位置上有没有值 ,有的话就对比是否相等,如果相等,则不再存储此值。 如果不相等(即为空),则把新值存在这。

python学习网,免费的在线学习python平台,欢迎关注!

python中哈希是什么意思_python hash是什么相关推荐

  1. python中字典和集合的区别_Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...

  2. 在python中print表示的数据类型是_python之数据类型

    每一种计算机语言都有自己的数据类型,但大多数计算机语言的数据类型都基本一致,下来我们来看看python中的数据类型 int数字,运算 就是用来计算的,定义方式就是 :变量名 = 数值 方法也不多,就记 ...

  3. json和python中字典的区别和联系_Python 中json与字典的关系

    Python开发中字典和 json的概念区别: json.dumps( dict ) 字典变为字符 json.loads( jsoninput ) 字符变为字典 一.字典 字典是一种数据结构,而jso ...

  4. python中浮点型占几个字节_Python基本数据类型

    一.简介 Python基本数据类型一般分为:数字.字符串.列表.元组.字典.集合这六种基本数据类型. 其中数字又包含整型(整型又包括标准整型.长整型(Python2.7及之前版本有)).浮点型.复数类 ...

  5. json和python中字典的区别和联系_python中字典和json的区别

    定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...

  6. python中常数e_常数python_python 常数_python 常数e - 云+社区 - 腾讯云

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在python3.7以前我们可以通过import pdb的pdb.set_tra ...

  7. python中字典的基本形式是什么_python中的字典详细介绍

    2014 一.什么是字典? 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它 ...

  8. python中str的index什么意思_python中index的用法是什么

    index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如:>>> t=tuple('Allen') >>> t ('A', 'l', ...

  9. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...

    GIL锁 ​ 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...

  10. python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)

    a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...

最新文章

  1. 实战postfix邮件发送
  2. visio取消首字母大写
  3. java正则表达式所有字符串_java正则表达式获取字符串中所有匹配的内容
  4. ItemAdding事件接收器中无法取到【创建者】的字段的值
  5. svn教程----svn简介
  6. Memcached 1.5.13 发布,支持 TLS
  7. Java RGB数组图像合成 ImageCombining (整理)
  8. git服务器维护 备份,gitlab服务运维,备份与恢复 - 橙子柠檬's Blog
  9. ip68级防水可以泡多久_iPhone8防水级别升级至IP68:能在1.5米深水中坚持30分钟
  10. linux 镜像错误,VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057)
  11. java treemap lastkey,java.util.TreeMap.higherKey()方法实例
  12. 【报告分享】2019中国硬科技发展白皮书(195页官方版).pdf(附下载链接)
  13. linux 安装apache、tomcat问题汇总
  14. 微信 百度云 服务器繁忙,百度网盘搜索功能失效提示操作过于频繁如何解决
  15. iphone 升级后闪退
  16. 网页计算机谈音乐,如何用windows电脑录制网页上或电脑中自己的音乐
  17. JVM系列(十七):字节码指令集
  18. Blazor Web Assembly (WASM) 主题切换
  19. 转发:IT行业中的甲方乙方关系
  20. 使用Java开发高性能网站需要关注的那些事儿

热门文章

  1. iphone禁止自动连接wifi操作方法「苹果教程」
  2. 如何禁用电脑文件共享
  3. (杂谈)攻击者与开发者的无形碰撞--逻辑漏洞的挖掘实战及反思(一)
  4. 前端三大框架React、Vue、Angular简述
  5. 学习《医学三字经白话解》之气喘
  6. 2019寒假专题一 L CodeForces - 1260B
  7. 单片机MPU9250/6050陀螺仪芯片驱动
  8. 高手过招的乐趣---测试用例预演
  9. 猿创征文|Apache ShenYu网关插件介绍
  10. matlab 图例框去掉,[转载]matlab绘图中legend的终极用法,去掉legend的边框