哈希加密算法在软件开发和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地址,文件系统,数据库,数据校验等等。有兴趣可以深入研究,可以拓宽编程思路。
当青岛*测控技术有限公司遇上安企神,测控技术数据安全将迎来哪些新变化?
海*测控技术有限公司是海*微电子有限公司100%控股子公司,是由青岛市政府、山东省政府及行业领军企业共同出资成立的第三方检测平台。旨在集成电路可靠性验证及测试分析领域打造国内一流集成电路检测、分析、设计开发及技术解决方案等集成电路产业共性技术服务平台。海*以海洋装备和高端设备集成电路可靠性验证和测试分析为特色,主要为海...
"聚势谋远:重庆*医药集团与安企神达成战略合作,探索医药+科技融合发展新路径!
重庆*医药集团有限公司成立于2017年8月,是在重庆市*区医药(集团)有限责任公司基础上组建成立的大型医药产业企业。是重庆*经济技术开发(集团)有限公司控股的混合所有制企业和市级重点项目三峡国际健康产业园投资单位,位列全国百强医药流通企业。公司下辖重庆*制药有限公司、*医药科技重庆有限公司、重庆*肿瘤医院等十余家子公司...
聚焦核心数据安全:山东卫禾*股份有限公司携手安企神软件构建防泄密屏障!
项目背景山东卫禾*股份有限公司于2015年注册成立,公司拥有总资产1.5亿元,公司具有齿轮检测中心、三坐标测量仪、全谱直读光谱仪等关键研发设备。运用UGNX7.5、MASTA5.4等研发软件进行研发,具有强大的技术研发能力,拥有31项专利,坚持产学研结合,设有山东卫禾*技术研究院,并不断加强研发平台建设,打造创新型企业...
安全+智造双升级!江阴*电子有限公司携手安企神开启企业防护新时代!
江阴*电子有限公司成立于1989年,是一家电子元器件集成设计和生产服务的领先供应商。产品应用包括数据采集、计算机外围设备和其他电子产品。还进入了汽车电子行业、航空航天行业、工业控制行业、医疗器械行业和消费电子行业,为客户提供更广泛的高附加值产品和服务。随着科技产业的快速发展和市场需求的增加,现已成功转型为一家提供完整解...
福建*医药公司联手安企神软件,成功落地应用程序、网站黑名单设置与USB管控方案!
项目背景福建*医药有限公司前身是福建*工贸责任有限公司,2015年重组后成为中国五百强企业——*医药集团的子公司。 系中国最大的民营医药集团,是在中国医药商业行业处于领先地位的上市公司。公司成立于2015年08月04日,经营范围包括中药饮片、中成药、化学原料药、化学药制剂等。应用需求管控公司电脑安装程序和使用程序,禁...