00:00
好,下边我们来看gate的基本原理,这部分没有任何的具体操作,但是我们希望大家能够通过对基本原理的学习,了解到gate的本地库在内部是如何管理各个版本的历史数据的,以及get的分支操作为什么能够非常的流畅啊和高效。我们在讲具体的原理之前,我们先要看一个概念呢,叫做哈希,哈希其实是一种加密算法,这种加密算法它有这样一些特点。所谓加密呢,就是需要把我们的铭文。转变为秘文,其实这个铭文呢,倒不一定非得是这个文本啊,呃,对于哈希来说呢,什么样的文件呢,也都可以拿来去做这个加密的操作啊,诶你哪怕是音频视频啊,图片这些呢,这样的文件呢,也都是可以的。那么这个加密的过程呢?是这样的。从铭文变成密文呢,需要有一个加密算法,哎,我们这个哈希呢,它就是一个加密算法。
01:10
哎,我们把这个铭文作为输入的数据交给这个加密算法,然后加密算法呢,给我们通过一系列的计算得到这个密文,哎,那么这个哈希这种加密算法呢,它有这样几个特点。我们看一下,首先一个特点呢,是不管输入的数据,它的数据量呢有多大,使用同一个哈希算法的时候得到的加密结果哈,它的长度一定是固定的。比如说呢,在哈希算法里边呢,有一种算法叫MD5啊,那么你把这个输入的数据,哎,都是使用这个我们MD5的这种算法呢去加密,那么得到的长长度哈,不管你不管你是拿什么数据来加密,它的结果呢,都是16个字节啊,不管你是一个几K的一个很小的文本文件,还是一个很大的一个几个G的一个电影,电影的一个文件啊,它得到的结果呢,都能够是一个16个字节的一个密门。
02:08
啊,这就是它的加密的结果啊,这个这个我们听起来会觉得很神奇哈,它是怎么做到的呢?啊,这具体这个细节哈,它内部呢,这个加密算法的内部哈,是一系列这个非常复杂非常深奥的这个数学的运算啊,所以说它是有这个非常深奥的数学的这个支持的啊,我们没有相当的数学功底的话,我们还是没办法去探究它是怎么去做到的哈,我们就知道它这个有这样一个特性就好了,这是一个哈,还有呢,就是这个哈希算法哈,呃,只要你算法是确定的,那么输入的数据也是确定的,那么输出的数据呢,它就是也是确定的。啊,就是你同一个数据,不管你执行,呃,这个加密呢,多少次啊,就是不管你在什么时候去执行这个加密,它得到的结果呢,都是同一个结果。哎,还有呢,这个加密算法确定的前提下,如果我们输入的数据,哪怕是你有非常细微的变化,输出数据呢,也一定就会有变化。
03:09
啊,而且呢,通常是非常大的变化啊,还有呢,哈希算法是不可逆的,你根据一个哈希的一个秘文,没办法反推回这个铭文。啊哎,所以说这时候它是不可逆的,我们这儿呢,有一个小的工具哈,我们这儿让大家呢来体会一下,你看呢。我们在外边儿哈,咱们去创建一个,呃,很简单的一个文本文件里边我们就写上这个123123,然后呢,我们拿这个加密工具哈。它其实是一个文件校验工具哈,我去选中我桌面上的这个文件。哎,我一点打开呢,它这个。文件校验工具就对我们这个文件的内容进行了这个加密的操作,你看这个是他MD5加密的结果啊,这个是他的,呃A1这个加密的结果,这个是CRC32加密的结果,我们可以把这个加密的结果呢,我们去复制一份。
04:12
我们在外边哈,咱们再新建一个文本文件的叫伪造的哈,我们把这个结果呢,暂时先保存起来,然后呢,我们给这个原来的这个文件哈,给他增加很多很多这个别的内容。哎,你这个时候能看到哈,我们这个文这个文件从内容比刚才最初的123123这个是要多很多很多很多内容是吧,这个内容呢,它数据量呢,翻了很多很多倍,但是呢,我们再让他重新去执行一下这个加密的操作。诶嗯,这是上一次的哈,这是我们这一次的,我们能够看到哈,你作为这个MD5的这个这个我们把他们拿到我们的这个result里边哈,我们来对比一下。
05:07
你看如果都是MD5这个算法的话,它得到的这个字符串呢,它的长度是一样的啊,它的长度是一样。其实呢,你看它是32位16进制数啊,这个时候我们就不数了,32位16进制数,那么其实每两个16进制数就对应一个字节啊,因为一个16进制数正好是四个二进制位哈,所以它正好是一个两个16进制数正好是一个字节,就是八个二进制位,诶这个时候呢,你看它们长度都是一样的。啊,不管你原始的这个铭文,或者说输入的数据是体积有多大,它输出的结果呢,它就一定是一定是固定的长度。哎,你包括这个另外的这个算法也是一样哈,呃,它这个其实哈,你看它生成的不同的加密,具体的加密算法不一样,就是都是哈希算法,他们都是哈希算法,但是呢,它只不过是哈希里边的具体的不同的算法啊,这这一系列都叫哈希啊,这是有具体的不同的算法,但是呢,只要你算法确定啊,它这个加密的结果呢,它这个长度就是确定的。
06:13
我们再看一个啊,我们给这个其中呢,什么别的地方都不给,我只是加一个很小很小的一个点,你要对于我们人来说呢,可能你很难发现这个文件呢,被修改了啊,被修改了加了这么一个点很难发现,但是呢,你看如果是对于我们这个程序来说。对于我们这个哈希的运算来说。我们要这个哈,我们拿这个和我们之前这个去做比较,这个呢是我们没有加那个点,这是我们加了点以后。哎,我们就拿其中的两个哈,咱们放到一起,这个更更清晰的去对比一下,你看这是加点之前,这个是加了点之后,同样的这个同样都是我们使用这个MD5算法。
07:04
诶,你看这个没有加点,是这样一个结果,加了仅仅是加了一个小数点啊,就产生了这么大的这个变化,哎,所以说你呃,原始的输入数据呢,变更一丁点啊,我这个输出的这个结果呢,虽然说它长度还是那个长度,但是它里边的具体的数据就会发生这个呃,天翻地覆的这个变化,整个就面目全非了啊,所以说这个时候它可用在什么地方呢?它就可以用在我们这个去校验这个文件,你比如说呢,我们在服务器端。有一个原始文件,这是我们要下载的,这个下载呢,它需要经过网络的传输,诶那么在这个网络传输的过程当中呢,有可能呢,就会丢失一丁点这个数据,有些文件呢,丢一点数据是没关系的,你比如说音频视频啊,图片这些呢,稍微丢一点哈,其实可能可能你用户你在看的时候都察觉不出来,但是我们可执行程序哈,你如果丢一点,很可能就会导致这个程序呢,就无法执行了,那么我怎么知道我下载到的这个文件它有没有出问题呢?诶这个时候呢,我们可以采取这个哈希算法呢,帮助我们去进行校验,我在服务器端呢,进行这个哈希的这个运算,得到这样一个值。
08:24
哎,得到这样一个值,你呢,下载下来以后呢,拿同样的这个算法也去也去这个。进行一下哈希运算,你看这两个呢啊,当然是必须是同一个算法哈,同一个哈希算法,双方比较一下,要是不一样的话,说明你这个文件呢,你下载到的这个文件相对于人家原始那个文件有变化啊,你甭管是大的变化还是小的变化,总之是总之是有变化的,诶那就说明哈,这下载的过程当中呢,出现了这个数据的丢失等等这方面的问题,那么我们就应该去重新去下载一下。嗯,你比如说我们来看一下哈。
09:04
我们来看一下我们这个tomcat。哎,我们看一下这个地方呢,是它的下载的这个地方,比如说呢,它这有一个踏点GZ这么一个包。我们看看,我们给他这个去另存为一下。我们把它下载下来,然后呢,你看这儿有个SHA1,这个呢,是人家服务器做我们这个运算。SHA1这个运算呢,得到的是这样一个值,那么我们下载下来以后呢,我们也可以做一个A1的这样一个运算,看看它结果是不是这个值,如果是的话呢,就说明这个就没问题,说明这个我们下载过程中呢,没有丢失数据。好。嗯,好,我们已经是放在桌面上了哈,那么然后呢,我们去浏览打开我们这个文件。
10:09
诶,大家看哈,我们把这个值CTRLC放到我们这个这。然后呢,把把我们这个值,刚才那个是从网页上复制过来的,然后呢,这个时候呢,拿过来。诶,我们看哈,这是从这个网站提供的这个哈希值,这个是我们教研得到这得到的这个哈希值,大家我们仔细去比对的话呢,你发现它只是英文字母的大小写不一样啊,那这个时候其实它不区分大小写啊,忽略大小写的问题以后呢,我们会发现它是完全是一样的。啊,你会发现这个完全是一样的,那说明我们的下载的过程呢,就非常的流畅啊,下载过程我们这个呃,网络传输呢也非常稳定,没有去丢失数据啊,这是我们这个文件呢,就可以放心的去使用了,这就是我们基于哈希的这种算法哈,所进行的这个验证文件的这样一个操作,其实我们get内部呢,也采取这个类似的办法呢,去进行这个文件的这个验证。
11:11
诶,那么G内部呢,采取的就是也是我们SHA1的这样一个算法,诶我们先对这个哈希呢,先有一个大致的初步的一个了解。
我来说两句