哈希函数/散列算法

本文介绍了哈希函数的概念、特点及哈希碰撞,详细阐述了MD、SHA和MAC算法的应用,包括MD5、SHA-1到SHA-3的安全性分析,以及HMAC在消息认证中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、哈希函数/散列算法文档

1.1、哈希函数介绍

哈希函数(Hash function),又称散列函数、散列算法,它是一种不可逆的信息摘要算法,具体实现就是把任意长度的输入信息通过哈希算法变成固定长度的输出信息。

1.2、哈希碰撞与输入输出

哈希碰撞:由于Hash是无限集合的数据向有限集合的数据进行单方向映射,所以难免会出现,对不同的数据可能得到相同的哈希值,这种现象称为哈希碰撞。因为哈希碰撞无法避免,所以要尽量降低这种碰撞成功的概率,以下为哈希值输入输出的两种情况:

  • 输入数据相同,则输出的结果值相同;
  • 输入数据不同,则有小概率输出的结果值相同。

1.3、哈希函数的特点

哈希函数没有特定的公式,一般只要符合散列算法的要求即可,只要符合散列算法的要求都可以称之为哈希算法,以下为哈希函数的主要特点:

  • 无论输入的消息有多长,计算出来的哈希值总是固定的;
  • 哈希计算的输出结果必须是随机和没有规律的;
  • 哈希函数必须是不可逆的单向函数,无法从输出的哈希值中推算出输入信息。

二、哈希函数的具体应用

一般相关的系统或组件都会自带哈希函数,我们可以使用其提供的HASH函数或HMAC函数对文本进行相关处理。通常情况下,不同的需求使用不同安全系数的散列算法,常见的安全哈希算法分类为:MD算法、SHA算法、MAC算法。

2.1、MD算法

MD(Message Digest Algorithm,消息摘要算法)算法是应用非常广泛的一个算法分支,尤其是MD5算法,它由 Ron Rivest(RSA 公司)在 1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据签名等很多场景。

  • MD2算法:它已被弃用,取而代之的是SHA-256和其他强大的散列算法;
  • MD4算法:虽然安全性已受到严重威胁,但是很多哈希算法如MD、SHA算法等都是基
### 哈希表再散列算法工作原理 当哈希表中的负载因子超过预设阈值时,为了保持高效的查找性能,通常会触发再散列操作。再散列意味着创建一个新的更大的哈希表,并将原有哈希表中的所有元素重新计算其位置并放入新的哈希表中[^1]。 具体来说,在开放地址法中,如果发生冲突,则通过特定的方法寻找下一个可用的位置来存储新元素;而在链地址法(即拉链法)里,即使发生了碰撞也不会影响其他键值对的访问效率,因为每个桶都维护着一个链接列表用于处理同义词群组[^2]。 对于采用线性探测、二次探测等开放定址策略解决冲突的情况而言,一旦进行了扩容之后不仅需要调整大小还需要改变原有的探查序列模式以适应扩增后的容量变化情况。而使用分离链接的方式则相对简单得多,只需为每一个旧槽位里的节点找到对应的新索引即可完成迁移过程。 #### 再散列的具体实现方式如下: ```python class HashTable: def __init__(self, size=8): self.size = size self.table = [[] for _ in range(size)] def hash_function(self, key): return abs(hash(key)) % self.size def rehash(self): old_table = self.table[:] new_size = self.size * 2 # 初始化更大尺寸的新哈希表 self.__init__(new_size) # 将原数据迁移到新的哈希表中 for bucket in old_table: for item in bucket: k, v = item index = self.hash_function(k) self.table[index].append((k, v)) ``` 此代码片段展示了如何在一个简单的基于链地址法构建的哈希表类 `HashTable` 中执行再散列的过程。每当检测到当前使用的空间比例过高时就会调用该函数来进行必要的扩展以及重定位所有的记录项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值