Hash是什么

小嘿 QA 2020-06-03 17:42:13 阅读(...)

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射。

Hash,一般翻译做散列杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射 pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

Hash是什么

简介

Hash 算法可以将一个数据转换为一个标志,这个标志和源数据的每一个字节都有十分紧密的关系。Hash 算法还具有一个特点,就是很难找到逆向规律。

Hash 算法是一个广义的算法,也可以认为是一种思想,使用 Hash 算法可以提高存储空间的利用率,可以提高数据的查询效率,也可以做数字签名来保障数据传递的安全性。所以 Hash 算法被广泛地应用在互联网应用中。

Hash 算法也被称为散列算法,Hash 算法虽然被称为算法,但实际上它更像是一种思想。Hash 算法没有一个固定的公式,只要符合散列思想的算法都可以被称为是 Hash 算法。

基本概念

若结构中存在和关键字 K 相等的记录,则必定在 f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系 f 为散列函数(Hash function),按这个事先建立的表为散列表。

对不同的关键字可能得到同一散列地址,即 key1≠key2,而 f(key1)=f(key2),这种现象称碰撞。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数 H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表散列,所得的存储位置称散列地址

若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。

散列表

散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。(注意:关键字不是像在加密中所使用的那样是秘密的,但它们都是用来“解锁”或者访问数据的。)例如,在英语字典中的关键字是英文单词,和它们相关的记录包含这些单词的定义。在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的内部数组所创建的索引上。

散列表散列函数的几乎不可能/不切实际的理想是把每个关键字映射到的索引上(参考散列),因为这样能够保证直接访问表中的每一个数据。

一个好的散列函数(包括大多数加密散列函数)具有均匀的真正随机输出,因而平均只需要一两次探测(依赖于装填因子)就能找到目标。同样重要的是,随机散列函数几乎不可能出现非常高的冲突率。但是,少量的可以估计的冲突在实际状况下是不可避免的(参考生日悖论)。

在很多情况下,heuristic 散列函数所产生的冲突比随机散列函数少的多。Heuristic 函数利用了相似关键字的相似性。例如,可以设计一个 heuristic 函数使得像 FILE0000.CHK,FILE0001.CHK,FILE0002.CHK,等等这样的文件名映射到表的连续指针上,也就是说这样的序列不会发生冲突。相比之下,对于一组好的关键字性能出色的随机散列函数,对于一组坏的关键字经常性能很差,这种坏的关键字会自然产生而不仅仅在攻击中才出现。性能不佳的散列函数表意味着查找操作会退化为费时的线性搜索。

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

扩展

MD5、SHA1 的破解

2004 年 8 月 17 日,在美国加州圣芭芭拉召开的国际密码大会上,山东大学王小云教授在国际会议上首次宣布了她及她的研究小组的研究成果——对 MD5、HAVAL-128、MD4 和 RIPEMD 四个著名密码算法的破译结果。次年二月宣布破解 SHA-1 密码。

命令描述

Linux 命令——hash

hash 命令用来显示、添加和清除哈希表。该命令的语法格式如下所示。

0个人收藏 收藏

评论交流

泪雪默认头像 请「登录」后参与评论
  1. 加载中..

相关推荐

  • HashMap

    HashMap和Hashtable的区别是什么

    Hashtable是线程安全的,所有方法同步,会影响它的性能,不允许键和值为null值,初始容量和增长因子固定,迭代顺序不确定;HashMap不是线程安全的,在单线程环境下比前者的性能更好,允许键和值为null值,多次迭代的顺序通常相同。
  • vue 路由 Vue routing

    Vue路由模式有哪些

    Vue路由模式有hash模式,使用URL的hash值来作为路由,支持所有浏览器;history模式,依赖于HTML5 API(旧浏览器不支持)和HTTP服务端配置;abstract模式,适用于所有JavaScript环境。
  • 7z

    7z和zip有什么区别

    7z和zip的区别是7z压缩率更高,压缩和解压速度最慢,ZIP压缩文件比较均衡;要使用7z格式需要安装专用软件,zip在windows和mac系统中默认集成了,不需要额外安装软件;7z对应的软件是7zip,zip对应的是winzip。
  • MD5

    MD5修改再发出来是原创吗

    MD5修改再发出来不算原创,算伪原创,很多视频平台会有机制算法来识别原创内容,所以只修改MD5发出来不是原创;MD5是计算机安全常用的一种密码散列函数,主要用于确保信息传输完整一致,MD5算法具有压缩性、容易计算、抗修改性、强抗碰撞等特点。
  • 蚂蚁链 ANTCHAIN

    蚂蚁链是什么

    蚂蚁链(ANTCHAIN,原蚂蚁区块链)是蚂蚁集团代表性的科技品牌,致力于打造数字经济时代的信任新基建。重新定义商业社会的生产关系和价值重塑,让信任推动数字经济的发展,让世界迈入实现更高效、更透明、更普惠的新契约时代。
  • 预取文件 Prefetch file

    Prefetch是什么文件夹

    Prefetch是预读取文件夹,用来存放系统已访问过的文件的预读信息,扩展名为PF,之所以自动创建Prefetch文件夹,,是为了加快系统启动的进程,XP的预读取数据应该定期删除,而在Vista中最好的方法还是不去管它。