【30天学习挑战】Day 1:搞懂哈希函数

107 阅读4分钟

一、什么是哈希函数? 哈希函数在我的理解上来看就是类似于一个机器,当我们输入数据给这个机器之后,这个机器会吐出一串字符串,并且这串字符串的长度是固定不变的,这串字符串就是所谓的哈希值,哈希函数就是这样的一个东西。

二、有哪些关键特性?

1.确定性:无论在何时何地,无论是在哪台电脑上输入相同的数据,他所给出的哈希值永远都是固定的一个,就相当于这个世界上所有的数据都对应着他特有的一个哈希值,这个值无论在哪永远都不会改变。 ⚠️可以自己去访问在线哈希工具,比如输入“hello”看他的哈希值之后退出重进,再次输入“hello”观察他的哈希值是否会发生变化。

2.快速计算性:对于输入的数据,计算他的哈希值的速度非常的快。

3.雪崩效应:当输入数据即使只是发生了一个微小的改动,那么他的哈希值将会发生翻天覆地的变化,与原来的那个哈希值将完全不相关,例如:hello的哈希值是:a1b2c3…a25e3… (数据并不准确,只是随便举的一个例子)当我改变一个比特位变为hellp之后哈希值将会变为:f4g8t9a1…h2e89…,他们变得毫无任何关联。这个特性保证了哈希值的不可预测性。 ⚠️但是注意,当我本人在验证雪崩效应的时候犯了一个错误,我验证文本哈希,将一个照片拖入哈希求值的在线网站中,输出了他对应的哈希值,然后我对这个图片的名称进行了修改,发现哈希值并没有发生改变,让我很疑惑,我去询问ai才发现,雪崩效应指的是文件的内容本身,而不只是一个所谓的“外壳”,当我直接在图片上多画了几笔,他的哈希值就发生了变化,验证了雪崩效应的存在!所以一定是针对于文本内容的修改,而不是名称。

4.单向性(抗破解性):这是哈希函数最核心、最神奇的一个特性,我们只能从输入数据算出他的哈希值,但是要想从他的哈希值反推出原始数据,这是极其困难,几乎不可能的,所以说这是单向性。

5.抗碰撞性:几乎不可能找到两个不同的数据,会产生出相同的哈希值。

三、哈希函数的用途?

1.数据完整性的校验:当我们从官网上下载文件时,官网通常会给出文件对应的哈希值,你可以在本地也是用哈希函数计算出文件的哈希值,要是发现两个哈希值并不相符,那么说明,文件可能下载不完整,或是在下载过程中被中间人恶意替换了(例如植入了病毒)

2.密码储存:当我们在网站上注册密码时输入密码为password123,这个网站的服务器存储的不是这个password123,而是计算出他对应的哈希值,然后将他的哈希值存储到数据库中,这样即使数据库被黑客入侵攻破,他得到的也只是一堆哈希值,要想从哈希值反推出我们的密码那几乎不可能。所以一个正规的网站都不会直接存储密码,而是存储其对应的哈希值。

3.区块链与加密货币:比特币等加密货币的核心技术就是哈希函数。每一个区块都包含前一个区块的哈希值,形成一条“链”,当历史数据被进行了篡改,哈希值将会发生巨大的变化,从而被后续节点发现,确保了这个区块链的不可篡改性。

⚠️针对于比特币的了解,敬请期待😊