服务器哈希(哈希表的计算方法)

哈希算法的计算方法

用来产生一些数据片段(例如消息或会话项)的哈希值的算法。使用好的哈希算法,在输入数据中所做的更改就可以更改结果哈希值中的所有位;因此,哈希对于检测数据对象(例如消息)中的修改很有用。此外,好的哈希算法使得构造两个相互独立且具有相同哈希的输入不能通过计算方法实现。典型的哈希算法包括 MD2、MD4、MD5和 SHA-1。哈希算法也称为“哈希函数”。

另请参阅:基于哈希的消息验证模式(HMAC), MD2, MD4, MD5,消息摘要,安全哈希算法(SHA-1)

MD5一种符合工业标准的单向 128位哈希方案,由 RSA Data Security, Inc.开发。各种“点对点协议(PPP)”供应商都将它用于加密的身份验证。哈希方案是一种以结果唯一并且不能返回到其原始格式的方式来转换数据(如密码)的方法。质询握手身份验证协议(CHAP)使用质询响应并在响应时使用单向 MD5哈希法。按照此方式,您无须通过网络发送密码就可以向服务器证明您知道密码。

质询握手身份验证协议(CHAP)“点对点协议(PPP)”连接的一种质询响应验证协议,在 RFC 1994中有所描述。该协议使用业界标准 MD5哈希算法来哈希质询串(由身份验证服务器所发布)和响应中的用户密码的组合。

点对点协议

用点对点链接来传送多协议数据报的行业标准协议套件。RFC 1661中有关于 PPP的文档。

另请参阅:压缩控制协议(CCP),远程访问,征求意见文档(RFC),传输控制协议/Internet协议(TCP/IP),自主隧道。

关于哈希值

通俗来讲,哈希值就是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作者,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。

有这样一种情境,有三万张图片我们要均匀放置于三个缓存服务器上

简单的做法是对缓存的key进行哈希计算,得到的值进行取模计算,所得到的余数,便是缓存的服务器编号

hash%机器数=余数

当机器数为3时无论值为多少,其余数永远只有0,1,2三种情况

那么根据余数,我们给服务器进行编号s0,s1,s2,余数为0的放置于s0服务器上,1,2同理。

这样我们就将三万张图片的缓存均分成三份存放与三台缓存服务器中

因为对同一张图片进行哈希计算时,所得到的哈希值是不变的,所以当需要访问图片时,只要再次进行哈希计算和取模计算,就能获取到图片存放于哪台服务器,便可以去该服务器中查找满足了我们的需求。而这种算法也称之为哈希算法

这其中有一个问题,那便是如果我增加一台服务器呢

可以预见的是,当增加一台服务器服务器数变成了4.而余数也出现了4种情况

这时向s2的服务器查询时,无法读取到图片,这导致了程序无法从缓存服务器中读取数据,这时程序就会向后端服务器请求,而大量的缓存同时失效,会导致所有请求都指向后端服务器,这会引起后端服务器的崩溃。

这是就要引入一致性哈希算法

还是同样的三个缓存服务器,这次我们将哈希值对2 32取模,所得到的数一定是1到2 32之间的一个整数

然后我们想像一个圆环,其上的每一个点都代表1到2^32之间的一个整数,而这个圆环也被称为hash环

之后我们对服务器A进行取模计算,这样算出来的整数肯定在1到2^32之间,将这个整数代表为服务器A,并且我们可以将这个整数映射到哈希环上,同样的道理我们处理另外两个服务器,这时三个服务器都被映射到了哈希环上,对于图片我们也将他映射到哈希环上

那么我们只要从图片的哈希值开始,沿顺时针在哈希环上查找,遇到的第一个服务器便是图片缓存所在的服务器

这时哪怕新添加一个服务器在哈希环上,我门所丢失的缓存数据也只是新添加的服务器到逆时针方向遇到的第一个服务器这部分数据,而这样仍然有大部分缓存在缓存服务器中可以被查找到,这样可以帮助后端服务器分担大部分压力,不会使服务器崩溃,而这部分丢失的缓存数据,之后重新在后端加载便可以了

这又引入了另一个问题,哈希偏斜

我们无法确保三个服务器在哈希环上为均分的状态,很有可能其中一台服务器分到了很大部分而另两台分到了很少的部分,这样同样会有后端服务器崩溃的隐患

我们可以添加很多虚拟结点同一个服务器我们分出许多虚拟节点,映射在哈希环上,哈希环上的节点越多,缓存被均分的概率便越大,这样可以尽可能的保证缓存在服务器上是接近理想均分的状态,避免了哈希偏斜的问题

什么是哈希值

许多朋友不知道哈希值是什么,想知道哈希值怎么用,小编这里就做一下科普。

哈希值是什么

哈希值就是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作着,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。

消息身份验证代码(MAC)哈希函数通常与数字签名一起用于对数据进行签名,而消息检测代码(MDC)哈希函数则用于数据完整性。

举个例子,小红和小明可按下面的方式使用哈希函数以确保数据完整性。如果小红对小明编写一条消息并创建该消息的哈希,则小明可以在稍后散列该消息并将他的哈希与原始哈希进行比较。如果两个哈希值相同,则该消息没有被更改;但是,如果值不相同,则该消息在小红编写它之后已被更改。为了使此系统运行,小红必须对除小明外的所有人保密原始的哈希值。

哈希值的应用

由于本身的固定性哈希值可以用在文件搜索上,比如可以利用文件哈希值在下载工具上搜索文件,下面小编就以电驴(emule)为例,说明一下使用方法。

一.知道资源HASH值如何搜索文件

表达式:

ed2k::文件哈希值

举例,我知道一个文件的hash值是:E8C636D0C0486378BF61E6A3000D0FB7

我就可以在选择搜索方式“服务器”或者“全局服务器”,然后输入:

ed2k::E8C636D0C0486378BF61E6A3000D0FB7

这样就能找到hash值等于这个值的文件了,如果文件名有很多种,可以点开文件名前面的小加号“+”,查看所有文件名。

如图所示:

已知文件hash值在电驴服务器搜索一个文件

二.寻找相关文件

表达式:

related::文件哈希值

同上选择搜索方式“服务器”或者“全局服务器”,然后输入:

related::E8C636D0C0486378BF61E6A3000D0FB7

就可以找到与此文件相关的文件,但是具体怎么相关,小编暂时不知道。

最后附上一款好用的哈希值计算工具(HashChecker):

阅读剩余
THE END