精华内容
下载资源
问答
  • 散列函数

    千次阅读 2018-09-05 22:36:31
    散列函数是一类将任意长度输入位(或字节)串转换为固定长度输出含糊。散列函数一个典型应用是数字签名。给定一个消息m,当然可以对这个消息本身进行签名。然而,大多数数字签名方案所采用公钥运算运算...

    散列函数是一类将任意长度的输入位(或字节)串转换为固定长度的输出的含糊。散列函数的一个典型应用是数字签名。给定一个消息m,当然可以对这个消息本身进行签名。然而,大多数数字签名方案所采用的公钥运算的运算代价很大,直接对消息本身签名非常不经济。因此不会直接对m进行签名,而是应用散列函数h,对h(m)进行签名。相对于成千上万位长度的消息而言,散列函数的输出一般128位到1024位之间。对h(m)的签名比对消息m直接签名要快得多。为保证采取这种方法构造的签名是安全的,必须要去散列函数满足以下条件:很难构造出两个消息m1和m2,使得h(m1)=h(m2)。散列函数优势又称为消息摘要函数,器散列结构也成为摘要或者指纹。对于散列函数还有更广义的理解,因为除了生成消息摘要,对于散列函数还有很多其他的应用。

    展开全文
  • 散列以及散列函数

    2007-08-17 13:08:37
    一 什么是散列 ...散列又可以有几种(理想的散列,典型的散列),所谓理想散列 就是不产生冲突的散列,它将每个查找键都映射为不同的整数值。 二 散列函数  散列函数的一般特性:  1 使冲突最小  ...

    一   什么是散列

             散列就是无需查找,直接用元素的查找键来确定元素索引的方法。实现了散列这种方法的函数就叫散列函数,散列函数

    接受查找键,产生一个称为散列表的数组中的元素的索引。散列又可以有几种(理想的散列,典型的散列),所谓理想散列

    就是不产生冲突的散列,它将每个查找键都映射为不同的整数值。

    二 散列函数

          散列函数的一般特性:

          1   使冲突最小

          2    使元素均匀分布在散列表里。

          3    计算要快。

           散列函数的功能:

             1  将查找键转换为称为散列码的整数。

             2   将散列码压缩到散列表的范围。

     

    展开全文
  • 加密 一个典型的加密单向函数是“非对称”的,并且由一个高效的散列函数构成;一个典型的加密暗门函数是“对称”的,并且由一个高效的随机函数构成。确保传递真实的信息 消息或数据的接受者确认消息是否被篡改的...

    一、散列函数的具体应用

    加密
      一个典型的加密单向函数是“非对称”的,并且由一个高效的散列函数构成;一个典型的加密暗门函数是“对称”的,并且由一个高效的随机函数构成。
    确保传递真实的信息
      消息或数据的接受者确认消息是否被篡改的性质叫数据的真实性,也称为完整性。发信人通过将原消息和散列值一起发送,可以保证真实性。
    散列表
      散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。例如,在英语字典中的关键字是英文单词,和它们相关的记录包含这些单词的定义。在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的内部数组所创建的索引上。
    散列表散列函数的几乎不可能/不切实际的理想是把每个关键字映射到唯一的索引上,因为这样能够保证直接访问表中的每一个数据。
    一个好的散列函数(包括大多数加密散列函数)具有均匀的真正随机输出,因而平均只需要一两次探测(依赖于装填因子)就能找到目标。同样重要的是,随机散列函数不太会出现非常高的冲突率。但是,少量的可以估计的冲突在实际状况下是不可避免的(参考生日悖论或鸽洞原理)。
    错误校正与检测
      使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。
    Rabin-Karp字符串搜索算法
      Rabin-Karp字符串搜索算法是一个相对快速的字符串搜索算法,它所需要的平均搜索时间是O(n).这个算法是创建在使用散列来比较字符串的基础上的。

    二、散列函数的安全性以及目前安全散列函数的发展

    安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

    散列函数的安全性

     2004年8月17日,在 CRYPTO 2004的Rump会议上,王小云,冯登国(Feng)、来学嘉(Lai),和于红波(Yu)宣布了攻击MD5、SHA-0和其他散列函数的初步结果。他 们攻击SHA-0的计算复杂度是240,这意谓的他们的攻击成果比Joux还有其他人所做的更好。请参见MD5安全性。2005年二月,王小云和殷益群、 于红波再度发表了对SHA-0破密的算法,可在239的计算复杂度内就找到碰撞。

    2005年二月,王小云、殷益群及于红波发表了对完整版SHA-1的攻击,只需少于269的计算复杂度,就能找到一组碰撞。(利用生日攻击法找到碰撞需要280的计算复杂度。)

    (生日攻击(Birthday Attack):根据抽屉原理,一个屋子里必须有366个人(一年有365天,不考虑闰年)才能保证一定有2个人生日相同。然而,如果一个屋子里有23个人,则有50%的概率2个人生日相同。密码学上认为,如果能找到一种方法,能在计算时间小于2^{80}的情况下,有超过生日攻击的概率下找到一组碰撞,则认为这个哈希函数就不安全了。
    这 篇论文的作者们写道;“我们的破密分析是以对付SHA-0的差分攻击、近似碰撞、多区块碰撞技术、以及从MD5算法中查找碰撞的消息更改技术为基础。没有 这些强力的分析工具,SHA-1就无法破解。”此外,作者还展示了一次对58次加密循环SHA-1的破密,在233个单位操作内就找到一组碰撞。完整攻击 方法的论文发表在2005年八月的CRYPTO会议中。
    殷益群在一次面谈中如此陈述:“大致上来说,我们找到了两个弱点:其一是前置处理不够复杂;其二是前20个循环中的某些数学运算会造成不可预期的安全性问题。”
    2005年8月17日的CRYPTO会议尾声中王小云、姚期智、姚储枫再度发表更有效率的SHA-1攻击法,能在263个计算复杂度内找到碰撞。

    碰撞攻击、原象攻击、生日攻击、暴力破解、彩虹表、旁路攻击、长度扩展攻击

    MD5,SHA1,SHA256不是用来保存密码用的, 是用来校验数据完整性用的

     

    散列函数的发展
    SHA-0:1993年发布,当时称做安全散列标准(Secure Hash Standard),发布之后很快就被NSA撤回,是SHA-1的前身。
    SHA-1:1995年发布,SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。但SHA-1的安全性在2000年以后已经不被大多数的加密场景所接受。2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1[1]。
    SHA-2:2001年发布,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。
    SHA-3:2015年正式发布,SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是现在的SHA-3。

    SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。但SHA-1的安全性如今被密码学家严重质疑;虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。

    三、md5算法在验证软件完整性时可能出现的问题

    早期的碰撞样本,主要采用“前缀构造法”,以同一个给定的前缀程序A为基础,在尾部添加不同的附加数据,得到两个具有相同MD5的样本B和C。前缀构造法碰撞后的两个样本只有尾部少量字节不同,而程序代码是相同的。通过判断尾部数据的差异,两个样本可以执行不同的程序流程。由于这种碰撞手法是通过同一前缀程序碰撞生成的两个样本,如果其中有恶意代码流程则两个样本均包含恶意代码,所以比较容易被安全软件识别,隐蔽性较差。

    选择前缀攻击则是构造两个不同的消息s1和s2,他们不必有共同的前缀,但是经过在尾部附加不同的“碰撞块”后,两个消息的散列值相同。选择前缀攻击是包括共同前缀攻击的,因此共同前缀的攻击代价小于选择前缀攻击。对于两个给定的不同前缀p1和p2,CPC攻击可以构造出两个后缀m1和m2,使得
    hash(p1+m1) = hash(p2+m2)
    而且p1+m1的长度和p2+m2的长度相等。
    举个例子,令p1=“希拉里会当选”,p2=“川普会当选”。在大选之前先利用CPC攻击,构造出两个后缀m1和m2,然后计算他们的MD5值v=MD5(p1+m1)=MD5(p2+m2)。然后告诉世人本次大选结果的md5值是v。在真正结果揭晓后,若希拉里当选,则展示p1+m1,否则展示p2+m2,即可完成预测。当然实际场景下没有那么简单,任何人看到“XXX当选”后面那串毫无意义的后缀字串都会产生质疑。在实际攻击场景中往往需要一个可以在末尾附加额外数据的数据结构上进行CPC攻击,例如PE可执行文件、ZIP压缩文件、JPG图像文件等末尾都可以加入后缀且不影响正常使用。利用CPC攻击,还可以构造多个消息的碰撞。

     

    helloworld.exe和goodbyworld.exe这两个程序会在屏幕上打印出不同的字符,但是它们的 MD5 都是一样的,却又都能正常运行,并且可以做完全不同的事情。

     

    MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。

     

    转载于:https://www.cnblogs.com/hiawei/p/9029059.html

    展开全文
  • 散列函数与散列表

    2017-04-11 18:52:38
     散列函数:就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。...例如直接取余算法以及乘法取整算法就是典型的散列函数。其主要功能是对一个数据序列的访问过程更加迅速
    

    散列函数:就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。例如直接取余算法以及乘法取整算法就是典型的散列函数。其主要功能是对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。

    对不同的关键字可能得到同一散列地址,即key1key2,而f(key1)=f(key2),这种现象称碰撞。具有相同函数值的关键字对该散列函数来说称做同义词。散列函数如果输入相同则输出结果一定相同,如果输出结果相同输入结果不一定相同。

    散列表:Hashtable),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。散列表就是把Key通过一个固定的算法函数既所谓的散列函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。

    简单来说,就是有一个关键码值,通过散列函数得到一个数值,这个数值就反映的是位置信息。在散列表中根据之前的数值得到的访问位置就是关键码值对应的访问位置。

    参考资料:

    http://baike.baidu.com/item/Hash/390310?fr=aladdin

    http://blog.csdn.net/duan19920101/article/details/51579136

    展开全文
  • 散列、散列函数、冲突处理

    千次阅读 2017-08-04 17:20:03
    2、散列基本思想:以关键字key为自变量,通过一个确定函数 h(散列函数),计算出对应函数值h(key),作为数据对象存储地址。3、冲突:可能不同关键字会映射到同一个散列地址上, 即h(keyi) = h(keyj)(当...
  • 散列表,它是基于高速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构能够理解为一个线性表,可是当中的元素不是紧密排列的,...这个映射函数叫做散列函数,存放记录的数组叫做散列表。...
  • 举个例子,我们将参赛选手设置一个编号,比如051167,表示 5 年级 11 班 67 号选手,然后在数组索引下标对应 67 的位置存储该选手,这就是典型的散列思想,我们将参赛选手的编号叫做键(key)或者关键字,用它来标识...
  • 哈希函数(散列函数),哈希函数的输入域可以是非常大的范围,比如任意一个字符串,但是输出域是固定的范围,假设为S,并具有如下性质: 1、典型的哈希函数都有无限的输入值域 2、当给哈希函数传入相同的输入值时...
  • 一,概念:  散列(HASH)函数H也称... 二,散列函数是安全是指它具有:  一致性:相同输入产生相同输出。  随机性:消息摘要外观是随机,以防被猜出源消息。  唯一性:几乎不可能找到两个消息产生...
  • hash值--散列函数

    2020-07-08 14:49:05
    hash值,也叫散列函数。 释义bai:通过一定哈希算法(典型du有MD5,SHA-1等),将一段较zhi长数dao据映射为较短小数据,这段小数据就是大数据哈希值。他有这样一个特点,他是唯一,一旦大数据发生了变化...
  • CRC是通信领域中用于校验数据传输正确性最常用机制,也是Hash算法一个典型应用,Hash一般翻译为“散列”,也可直接音译为“哈希”,就是把任意长度输入(又叫做预映射,pre-image)通过散列算法变换成固定长度...
  • 散列

    2021-01-10 18:05:21
    1、散列 散列是一种数据结构,一种查找时间复杂度在o(1)的存储结构,依赖于散列函数。...在数学理论上,完美的散列函数是不存在的。但是在工程界,我们是可以设计出完美的散列函数的。 典型的就是SHA函数 ...
  • 散列实验研究

    2013-12-24 16:31:48
    散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。
  • java散列实现

    2019-06-08 15:45:26
    散列 是一种无需查找、只用元素的...典型的散列函数 不是完美的,因为它们可以允许不只一个查找键映射到同一个索引,导致散列表的冲突。   任何函数都可以作为散列函数,但是不一定是一个好的散列函数,好的散列函...
  • 散列介绍

    2010-08-30 17:34:00
    散列又可以有几种(理想的散列,典型的散列),所谓理想散列 就是不产生冲突的散列,它将每个查找键都映射为不同的整数值。 二 散列函数  散列函数的一般特性:  1 使冲突最小  2 使...
  • 首先,我们在网络里面,最典型的就是账号和密码的保护。这是一件看似简单,实则不易的事,因为里面涉及的东西有很多方面。比如说,数据库攻击,脚本攻击,跨平台攻击等多方面的攻击。因为,我们用户的注册信息不可能...
  • 【Java】散列

    2018-12-13 17:55:59
    若知道一个数组中元素的索引,可以使用索引在O(1)时间内获得元素。若将map中值存储在数组当中,并使map的键通过一个函数映射到值的索引上的话,就能...典型的散列函数首先将搜索键转换为一个称为散列码的整数值...
  • 散列函数 消息摘要 Message digest 对于任意给定的消息产生固定长度的散列值 函数特性 单向性 抗碰撞性(弱强) 应用举例 代替CRC等 很多软件发行时文件的MD5校验序列号识别 产生消息认证码 MAC 散列函数典型结构 将...
  • 散列(哈希表)

    2017-10-21 09:11:16
    散列是一种用于以常数平均时间执行插入、删除和查找技术。理想散列表数据结构是一个包含有关键字具有固定大小数组。典型情况下,一个关键字就是一个带...散列函数 如果输入关键字是整数,则一般方法是直...
  • 数据结构之散列

    2018-06-19 23:53:33
    散列是一种以常数平均...每个关键字经过散列函数都会被映射到0到tableSize-1范围内。通常是保证表大小为素数。如果不同关键字映射到了相同值,这时候就会产生冲突。解决冲突方法有分离链接法和开放定址法...
  • 02 散列算法

    2020-02-04 12:05:33
    MD5用是哈希函数,它的典型应用是对一段信息产生信息摘要,以防止被篡改。严格来说,MD5不是一种加密算法而是摘要算法。无论是多长输入,MD5都会输出长度为128bits一个串 (通常用 16 进制 表示为 32 个字符)。...
  •  散列函数主要问题就是解决冲突消除问题。如果当一个元素被插入时另一个元素已经存在(散列值存在),那么就会产生冲突。解决这种冲突方法有几种,一般用最简 单两种:分离链接法、开放地址法
  • 哈希函数又叫散列函数,一个哈希函数的输入域可以是非常大的范围,但是他的输出域是一个固定的范围 哈希函数的性质: 典型的哈希函数都拥有无限的输入值域输入值相同的时候,输出值也一样输入值不一样时,输出值...
  • 哈希函数

    2018-06-23 02:15:55
    哈希函数又叫散列函数,哈希函数的输入域可以是非常大的范围,但是输出域是固定的范围。哈希函数的性质:1.典型的哈希函数都拥有无限的输入值域;2.输入值相同时,返回值一样;3.输入值不同时,返回值可能相同,也...
  • 常见hash函数算法

    千次阅读 2014-02-21 16:06:57
    散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,...这个映射函数叫做散列函数,存放记录的数组叫做散列表。
  • 典型查找算法讲义.ppt

    2019-12-03 22:23:44
    散列存储是一种存储方法也是一种查找方法散列存储通过对元素关键字按给定函数进行计算得到存储地址此地址称为散列地址用于计算地址给定函数称为散列函数用于存储元素地址空间称为散列表构造散列函数方法有直接...
  • Hash 函数

    2015-05-04 14:58:45
    散列表,它时给予快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据可以理解为一个线性表,但是其中的元素...这个影色好函数叫做散列函数,存放纪录的数组叫做散列表。 比如我们存储7

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 225
精华内容 90
关键字:

典型的散列函数是