1.什么是hash算法
Hash(散列、杂凑)算法,是把任意长度的输入通过特定的算法变换成固定长度的输出,输出的值就是hash值。这个特定的算法就叫hash算法,hash算法并不是一个固定不变的算法。只要是能达到这个目的的算法都可以说hash算法。例如MD5,SHA,String.hashcode()都是hash算法。另外不同的输入可能会得出相同的hash值,那么这种现象称为hash碰撞,无论是采用那种hash算法,hash碰撞都是不可避免的,我们只能通过改进hash算法,把出现碰撞的概率降低。PS:hash这个词在因为英语中的意思是剁碎的食物,反应在计算机领域的意思大概就是把任意的数据切割打碎,输出固定长度的数据,所以通过hash这个单词也能大概理解hash算法的意思。
2.hash算法的应用
2.1 哈希表
由于用途的不同,hash在数据结构中的含义和密码学中的含义并不相同。所以在这两种不同的领域里,算法的设计侧重点也不同。在数据结构中,我们利用hash值来建立以key-value形式的数据结构——哈希表(散列表),使用哈希表我们可以实现对特定value的快速查找,时间复杂度为O(1);如果是普通的数组或者链表的数据结构,只能通过遍历的方式对特定value值的查找,时间复杂度为O(n);如果数组是有序的,那么可以通过二分查找,或者即使使用平衡二叉树的数据结构,时间复杂度为O(logN),都不如哈希表高效。但如果hash值出现频繁的碰撞,哈希表的查找效率就会降低,最坏的情况就会变成数组或者链表,复杂度降为O(n),因此数据结构中的hash算法应该要能均匀的输出hash值,使key能均匀的分布在不同的桶中。

2.2 密码学
hash算法也可以理解为一种压缩映射,把任意长度的信息压缩成固定长度,在密码学上把经过hash算法计算压缩后的数据称为信息摘要。
我们可以通过对比信息摘要来检验数据的完整性,防止数据在传输过程中被篡改。例如在http协议中传递参数a=1&b=2&hash=xxx,我们通过计算参数a=1&b=2+privateKey(一个双方都知道的密钥)的hash值,并将这个hash值也一并传递,那么接收方通过重新计算参数的hash值并与传递过来的hash进行对比,如果不一致那么就说明参数在传递过程中被人篡改了。所以密码学中的hash算法要有很强的抗篡改能力,对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。

到底什么是hash的更多相关文章

  1. 到底什么是哈希Hash?

    知识点总结 ---------------------------------------------------------------------------------------------- ...

  2. 到底什么是哈希Hash?

    有次面试被问到这个问题? 我说是经过运算的一串字符串,这个回答显然是让人不满意,连自己都不满意! 但是又对其很模糊,那么到底什么是Hash呢? 定义 Hash一般翻译为散列,还有音译为哈希,本文我们统 ...

  3. 分布式一致性Hash

    转载: https://blog.csdn.net/bntX2jSQfEHy7/article/details/79549368 为什么要有Hash一致性算法?就像以前介绍为什么要有Spring一样, ...

  4. 数据结构中的hash

    最近接触数据结构的时候突然发现一直在使用哈希表,哈希算法.那么到底什么是哈希(hash).查找资料发现一个比较有意思的解释,在此分享一下. 人家说的很好我就直接粘过来. =============== ...

  5. 一致性HASH算法在分布式应用场景使用

    其实不管redis还好,Mysql也好 这种数据存储介质,在分布式场景中都存在共同问题:即集群场景下服务路由.比如redis集群场景下,原本我们分3主3从部署.但万一有一天出现访问量暴增或其中一台机器 ...

  6. hadoop+海量数据面试题汇总(二)

    何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储.处理.操作.何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存. 那解决办法呢 ...

  7. july教你如何迅速秒杀掉:99%的海量数据处理面试题

    作者:July出处:结构之法算法之道blog 以下是原博客链接网址 http://blog.csdn.net/v_july_v/article/details/7382693 微软面试100题系列 h ...

  8. Java的容器类

    程序总是根据运行时才知道的某些条件去创建新对象.需要在任意时刻和任意位置创建任意数量的对象. 如果你想保存一组基本数据类型数据,建议使用数组,但是数组有固定的尺寸. 一般情况下,你在写程序时并不知道将 ...

  9. C++大数据处理

    转:http://blog.csdn.net/v_july_v/article/details/7382693 作者:July出处:结构之法算法之道blog 前言 一般而言,标题含有“秒杀”,“99% ...

随机推荐

  1. 老项目转为maven的步骤具体说明

    可先阅读 关于已有项目转为maven的一点看法 新建maven项目要点 事实上之前已转过几个.但忘了记录下来.今天又转了一个项目,补记录一下. 步骤 1.写pom.xml 最耗费时间的一步.由于不用m ...

  2. 如何监控Tomcat服务器

    如何监控Tomcat服务器 发表于:2009-06-25来源:作者:点击数:2651 标签:tomcatTomcat服务器 在进行 性能测试 时,一般都需要对应用服务器进行监控,监控的指标包括应用服务 ...

  3. HBase ProcedureV2 分析

    Procedure V2, 是hbase1.1版本引入的一套fault-tolerant的执行multi-steps-job的框架, 目前主要用在Master中, 比如创建表,删除表等操作 新旧比较 ...

  4. 域对象的引用,ActionContext 和ServletActionContext类的使用

    ActionContext 获取 域引用的map ServletActionContext获取具体域对象 //域范围 ActionContext ac = ActionContext.getConte ...

  5. Tomcat版本历史

    https://en.wikipedia.org/wiki/Apache_Tomcat Apache Tomcat versions Series Declared stable Descriptio ...

  6. SSH框架:同一个工程之前可以正常运行,现在不能

    一个问题是:有一个CRIMS的项目,之前是可以运行成功的.(这个工作空间就只有这一个项目).但是不知道怎么了,现在运行起来就会出现错误. 配置什么的都没有去修改过,(工程坏了??) 不过有一个奇怪的问 ...

  7. Oracle SQL Developer出现错误 【ora-28002:the password will expire within 7 days】的解决办法

    启动 Oracle SQL Developer的时候,点击用户system进行连接并输入密码后(下图左),会出现(下图右)提示信息: 即:[ora-28002:the password will ex ...

  8. NoSQL(四)

    mongodb介绍 https://www.yiibai.com/mongodb/mongodb_drop_collection.html 1.文档性数据库类似于json对象,分布式 mongodb安 ...

  9. xml布局内容总结(三)--Android

    关于xml中经经常使用到边框及边框效果,在此进行一下总结. 3.border(边框及边框效果) (1)直角边框线 <LinearLayout         android:layout_wid ...

  10. C#颜色 Color.FromArgb ColorTranslator 16进制

    //方法1: //引用命名空间 using System.Drawing; 16进制颜色代码转Color类型:ColorTranslator.FromHtml(color); Color类型转16进制 ...