哈希函数的一些知识

什么是哈希函数?哈希函数是一个数学函数,其具有以下三个特性:

 

  • 输入可以为任意大小的字符串;
  • 其产生固定大小的输出;
  • 对于特定的输入字符串,能在合理时间计算出结果。对应n位的字符串,其哈希值计算的复杂度为O(n)。

 

要使哈希函数达到密码安全,需要附加以下三个特性:碰撞阻力、隐秘性、谜题友好

特性1:碰撞阻力

 

这里的碰撞是指对于两个不同的输入,产生相同的输出。如果对于哈希函数H(x),没有人能够找到碰撞,则称该函数具有碰撞阻力。

定义:


  Hash函数H将可变长度的数据块M作为输入,产生固定长度的Hash值h = H(M)。

  称M是h的原像。因为H是多对一的映射,所以对于任意给定的Hash值h,对应有多个原像。如果满足x≠y且H(x)=H(y),则称为碰撞。

应用:信息摘要

  用于验证数据的完整性,即判断数据是否被篡改过。

 

特性2:隐秘性

定义:

  哈希函数H具有隐秘性,如果:当其输入r选自一个高阶最小熵的概率分布,在给定H(r||x)条件下来确定x是不可行的。

应用:承诺

我们把想做的事情称为承诺。这里承诺是一个数字化过程,类比如下:首先选定一个数字,将数字装进信封,然后将该信封放到一个人人都可以看到的桌上。这样做以后,可以说你就信封里的数字做出来承诺,在打开信封之前,虽然你已经做出了承诺,但是对于其他人来说它还是秘密。在之后你可以打开信封,展示你的承诺的数值。

特性3:谜题友好

定义:

如果对于任意n位输出值y,假定k选自高阶最小熵分布,如果无法找到一个可行的方法,在比2的n次方小很多的时间内找到x,保证H(k||x)=y成立,那么我们称哈希函数H为谜题友好。

  应用:搜索谜题

在这个应用种,我们将建立一个搜索谜题,该谜题是一个需要对庞大空间进行搜索,才能找到解决办法的数学问题。该搜索谜题没有捷径,也就是说除了搜索庞大的空间来进行求解,没有其他办法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为一个语言模型,我无法进行实际的交互式操作和输入输出。不过我可以为您提供一些基本的哈希表和哈希函数知识,以及线性探测再散列法的处理冲突方法,希望能对您有所帮助。 哈希表是一种使用哈希函数将关键字映射到数组索引的数据结构,通常用于实现快速的查找、插入和删除操作。哈希函数的设计非常重要,它应该能够将不同的关键字均匀地分布到数组的不同位置上,以最小化冲突的发生。 除留余数法是一种简单的哈希函数设计方法,它将关键字除以一个素数p,然后取余数作为哈希值。例如,若哈希表长度为m,关键字为key,则哈希函数可以表示为H(key) = key mod p mod m。其中,mod表示取余运算符。 线性探测再散列法是一种解决冲突的方法,它通过在哈希表中找到下一个空闲位置来存储冲突的元素。具体地,若哈希函数将关键字映射到位置i上,但是该位置已经被占用了,那么就顺序地查找下一个位置j = (i+1) mod m,直到找到一个空闲位置为止。如果整个哈希表都被占满了,那么就需要重新构建一个更大的哈希表,并将原有的元素重新哈希到新表中。 在给定一个关键字值进行查找时,可以使用与哈希函数相同的方法计算出关键字的哈希值,然后到对应的位置查找元素。如果该位置上的元素与待查找的关键字相同,那么就找到了目标元素。如果该位置为空,那么就说明目标元素不存在于哈希表中。 希望这些基本的知识能够帮助您完成实验。如果您还有其他问题,可以继续向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值