

新闻资讯
哈希游戏| 哈希游戏平台| 哈希游戏APP哈希游戏- 哈希游戏平台- 哈希游戏官方网站

举一个简单的例子来说明它的用法。譬如学校里以学生名字为索引建了一张表,存储学生的信息。同时希望在查找的时候能够高效率地查找到学生。可以怎么实现呢?(如果以学号为索引,可以一次查找就找到(根据学号的偏移计算);以名字为索引纯粹是举例,名字的问题在于它是字符串,所以需要使用字符串匹配;但是在实际中有很多以名字为索引的情况,譬如Web开发中,表单form的各项一般都有名字,在后台代码实现中便是以名字为索引的)
从上面的例子中可以看出哈希函数的一些基本特征。譬如,哈希函数接收各种输入,经过一定的运算,产生一定范围内的输出。上图中红色的线指出了哈希函数的一个重要特征,collision冲突。因为理论上,哈希函数可以接收所有的字符串作为输入,从输出的话,一般会限定一个范围,所以,极有可能有两个或多个输入产生同一个输出,这个时候就称为产生了一个冲突。常见的哈希算法如取模运算。譬如 x mod 100,会将101, 1001,和1 都哈希到1这个位置。(至于为何明知道有冲突还要用哈希,想一个例子,譬如有一个公司有200名员工,存储员工信息的表只需要200个项就够了;但是如果是以身份证号为索引,身份证号的空间范围是很大的(10^20左右),但是输入总共只有200个,也即非常稀疏,通过哈希可以将输出限制在200左右,比较好的哈希函数能够尽量避免冲突,或者冲突非常的均匀。)
加密哈希是哈希函数的一种,它具有某些属性,使其适用于加密。通过加密哈希,它将任意大小的数据映射到固定大小的位串(散列),并被设计为单向函数,即一个不可逆的函数。从理想的加密散列函数输出重新创建输入数据的唯一方法是尝试对可能的输入进行暴力搜索,以查看它们是否产生匹配,或使用匹配哈希的彩虹表。布鲁斯施奈尔称单向散列函数是“现代密码学的主力”。输入数据通常称为消息(Message),输出(散列值或散列)通常称为消息摘要或简称为摘要(Digest)。
这个性质就可以做信息摘要。考虑2015年的xcode后门事件,因为国内的开发者从苹果官网下载xcode开发框架速度太慢,所以一些公司的开发人员直接从百度云上下载了某些人“好心”提供的版本。腾讯的安全实验发现很多app出现异常流量后发现源头在于使用的xcode,即使开发人员本身写的代码是正确的,经过篡改的xcode可以将恶意代码链入到app中。所以带来的一个问题是,当我们下载开源的软件使用时,怎么可以保证下载到的软件是官方的而不是经过第三方恶意修改过的呢?
关于短的输入如何补足也有一些细节,在输入末尾进行填充,使输入长度在对512取模以后的余数是448。填充的具体过程:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。需要注意的是,信息必须进行填充,也就是说,即使长度已经满足对512取模后余数是448,补位也必须要进行,这时要填充512个比特。因此,填充是至少补一位,最多补512位。为什么余数是448呢?因为,还有需要有64位的数据表示原始输入的长度,加上这64bit的长度信息448+64=512,刚好512位。