哈希加密算法在软件开发和Linux内核中多次被使用,由此可以见哈希加密算法的实用性和重要性。下面就给大家简单介绍一下哈希算法的原理和应用,并给出了简略的代码实现,以便大家学习。
1.哈希加密的概念
哈希(hash 散列,音译为哈希)算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。
哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希算法都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。
哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的项作为记录在表中的存储位置,这种表称为哈希表,所得存储位置称为哈希地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。
查找一般是对项的摸个部分(及数据成员)进行,这部分称为键(key)。例如,项可以由字符串作为键,附带一些数据成员。
理想的哈希表数据结构只不过是一个包含一些项的具有固定大小的数组。
通常的习惯是让项从0到 TableSize-1之间变化。
将每个键映射到0到TableSize-1 这个范围中的某个数 ,并且将其放到适当的单元中,这个映射就称为散列函数(hash funciton)。
john被散列到3,phil被散列到4,dave 被散列到6,mary被散列到7.
这是哈希的基本思想。剩下的问题则是要选择一个函数,决定当两个键散列到同一个值的时候(称为冲突),应该做什么。
2.哈希函数
通常,键是字符串,一种选择方法是把字符串中字符ASCII码值加起来。
unsigned int hash( const char * key, int tableSize)
{
unsigned int hastVal = 0;
for( int i = 0; i < strlen(key); i++)
hashVal += key[ i ];
return hashVal % tableSize;
}
通过对ASCII码总和取tableSize的余数,来确定哈希值。
这是个简单的示例,实现起来很简单而且能够很快地算出答案。不过,如果表很大,则函数不会很好地分配键。由于ASCII字符的值最多为127,如果输入的key,都是长度比较小的字符串,那么返回的键值(哈希值)就会集中在哈希表的头部,这样就会分配不均匀。好的哈希算法这部分会非常复杂,这里仅仅做个介绍。在下面的哈希算法应用中会介绍linux内核如何使用哈希算法管理网络设备结构。
3.冲突的解决办法
在使用哈希算法时,除了哈希函数之外,还需要注意的是冲突(两个键散列到同一个值的时候)的处理。
常用的处理方式有分离链接法、线性探测、平方探测。由于线性探测和平方探测涉及到一些数学问题,本文就介绍分离链接法。
分离链接法也比较简单,其做法为将散列到同一个值的所有元素保留到一个链表中。
如上图所示,所有哈希表项对应一个链表,这样只要将冲突项放入链表就行,当查找时先找到链表,然后在比较链表上项的键,得到想要的项,这个方法比较容易实现,但是会增加查找的耗时,原来只需计算哈希值,现在增加了对链表项的比较功能。
4.哈希算法的应用
下面看看linux内核中网络设备,是怎么样通过设备名获取相应设备的net_device结构体。在这个过程中,使用了哈希算法,并且使用了分离链接法解决冲突的问题。使用哈希算法可以提高查询速度,如果使用链表,查询时需要逐一比较,效率低下。
dev_name_head为哈希表,保存了所有项的链表头。
1 << NETDEV_HASHBITS 为表的大小。
full_name_hash为哈希函数,其主要目的是为了分布均匀避免冲突,这样可以提高查找效率。
这个应用比较简单,但是清晰的展现哈希算法的架构,而且容易理解。
哈希算法应用很多场景,比如管理组播MAC地址,文件系统,数据库,数据校验等等。有兴趣可以深入研究,可以拓宽编程思路。
2025年十大员工管理软件推荐,助力高效团队管理
各位团队管理者们!是不是总感觉团队管理就像一场混乱的战役?员工们工作进度参差不齐,沟通仿佛隔着一层迷雾,任务分配更是毫无头绪?别着急,今天给大家介绍十款员工管理软件,绝对能让你的团队管理效率蹭蹭往上涨,工作开展得顺顺利利!一、升级团队管理,先从软件入手咱们都清楚,一个优秀的团队,光有一群才华出众的员工可不够,还得有一套...
立刻行动!教你简单几步为移动硬盘添加密码
你是不是常常担心,存着重要文件和珍贵照片的移动硬盘,哪天要是不小心丢了,或者被别人轻易翻看?今儿就教你个超简单的法子,给移动硬盘上把 “锁”,让它变成只属于你的私密保险箱!一、为啥要给移动硬盘设密码?咱们日常用的移动硬盘,就像个随身携带的“小仓库”,里头装着各种各样重要的东西。要是没做好安全措施,这些宝贵的数据,就跟放...
五款必备硬件监控软件,让你的设备更安全
咱们手里的电子设备那可是非常重要的,不论是工作学习还是娱乐放松,都离不开它们。但你有没有想过,这些设备要是突然出了啥毛病,数据丢了或者运行慢了,那可咋整?别急,今天就给大伙推荐五款超实用的硬件监控软件,它们能帮你把设备看得死死的,让安全不再是难题!一、为啥需要硬件监控软件?咱们平时用电脑是不是经常遇到卡顿、发热严重的情...
电脑远程监控系统能监测哪些内容?揭示背后真相
在这个数字时代,电脑简直就是咱们工作、学习和生活的好帮手。但麻烦也跟着来了,电脑安全问题越来越让人头疼。你是不是老担心,自己不在电脑跟前的时候,有人偷偷用你的电脑?或者重要的数据正被人悄悄偷走?别愁啦,电脑远程监控系统就是来解决这些问题的。今天,咱们就好好聊聊电脑远程监控到底能监测啥,还有这里面的门道。一、实时监控,啥...
三步搞定移动硬盘加密,数据安全不再难
咱们手里的数据可都是我们的宝贝。工作里攒下的资料,生活中拍的那些私人照片,还有学习时候记的笔记,每一份都藏着咱们的心血和回忆。可现在移动存储设备到处都是,数据丢了或者被别人偷看的风险也跟着变大了。你是不是老为移动硬盘里那些重要数据咋保密发愁呀?今天就教你个又简单又好用的办法 —— 花三步就能给移动硬盘加密,让数据安全再...