您的位置首页生活快答

什么是哈希算法?

什么是哈希算法?

的有关信息介绍如下:

什么是哈希算法?

哈希算法好比一台机器,无论送进来什么牛(信息),都能快速变成火腿(哈希值)。这个过程是不可逆的,不能把火腿再还原成牛。所以,哈希算法可以保护原始信息,每一头牛对应着唯一的火腿,每个火腿对应着唯一的区块,安全妥妥的!

我给你一个字符串:hello ,又给你一个字符串 world,你怎么知道这两个字符串不一样?

计算的步骤是不是这样:第一个字符串是不是一样:h != w

所以,这两个字符串不同。

~~~~~~~~~~~~

我再给你两个字符串:hello hellp ,你怎么知道这两个字符串不一样?

计算步骤是不是这样:1 h ==h 2 e==e 3 l==l 4 l==l 5 o!=p

所以,这两个字符串不同。

~~~~~~~~~~~~

我再给你两个字符串:

字符串1:hellohellohellohellohellohellohellohellohello......hellohello

字符串2:hellohellohellohellohellohellohellohellohello......hellohell0稍等,上面省略号部分我省略了1万个hello,你给我说说你的算法吧?

计算步骤是不是这样:

循环{

取第1个字符串的一个字符,取第2个字符串对应的字符;

比较是否相同;

}

如果全部相同,那么两个字符串就一样,否则就不同。

这样每次计算都要循环无数遍做比较,性能太差了吧。

~~~~~~~~~~~~~

开动脑筋啊!困难重重,困难重重。。。。

想到了。在计算机中每个字符都是一个数字,所以我能不能把字符串的每个字符转换为数字,然后通过加减乘除乘方开方等一系列算法(这个算法就是Hash算法),把字符串转换为一个数字呢?

嗯嗯,是可以的。这样上面那个几万个长度的字符串,就得到了一个整数。

这样,比较两个字符串的时候,我就可以比较这两个整数是否相等:整数1 == 整数2

哇!!!这样比较速度好快啊,原来循环好几万次,现在1次比较就得到结果了。

~~~~~~~~~~~~~~~

说的学术点:

1 Hash算法是将源数据通过一系列的计算得到一个整数的算法。

2 Hash算法力求原数据不同,计算出来的结果也不同。

3 Hash算法一定是原数据相同,计算出来的结果也相同。

4 Hash算法其实算是一种加密算法。

5 Hash算法的目的是比较两个数据是否相同。

6 Hash算法是一种统称,并不是一个具体的公式,只要能满足前面5个条件,就可以算是Hash算法。~~~~~~~~~~~~~~~~

设计一个简单的Hash算法。

把每一位字符转换为数字,并根据所在位数乘以10的次方,然后计算所有数字的和。

hello ==> h(104) e(101) l(108) l(108) o(111)

104*10^4+101*10^3+108*10^2+108*10+111= 1152991

hellp ==> h(104) e(101) l(108) l(108) p(112)

104*10^4+101*10^3+108*10^2+108*10+112= 1152992 这样一比较 1152991 != 1152992 ,可以判断这两个字符串不同。

说明:这里采用的是ascii码

这里举的例子,有的朋友不理解了,明显看不出这个优势啊,还不如循环速度快呢。计算半天。

这里要解释一下应用场景:如果两个字符串都很短,这个Hash算法提现不出优势。但是如果字符串很长,循环起来非常耗时,而Hash算法是可以优化的,不会像我设计的这个,只是傻傻的循环。那个时候,Hash算法的优势就很明显了。

你只能通过哈希从A查到B,不能从B反过来查到A知道密码,但是不能知道密码代表的确切意思,相当于只能知道密码,不能破译,只有真正知道的始终知道其真正意思,保护的秘密无法知道,保证送信的无法破译,只有收信人发信人能知道秘密的算法