📜  散列在近期技术中的效用

📅  最后修改于: 2022-05-13 01:56:12.077000             🧑  作者: Mango

散列在近期技术中的效用

在一句话中,散列是将键(输入)转换为不同的值。它基本上是通过使用将原始数据作为输入并对其进行一些计算的函数或方法来完成的,以使结果值与原始值相去甚远,并且该函数称为散列函数,而输出是散列码.然后我们可以使用这个哈希来快速搜索数据,而不是遍历整个存储。

散列的好处:

在我们需要查看两个文件是否相同而不亲自检查它们的情况下,我们使用散列。当我们尝试传输文件以确保传输的文件没有损坏或更改时,用户可以比较两个文件的哈希值并检查是否相等。我们也可以说散列提供了一种比任何其他数据结构更可靠和更灵活的方式来检索任何数据。

我们可以在日常生活中看到散列的各种应用。让我们看看散列的几个应用:

区块链

加密货币的基础是区块链,它只不过是各个交易数据块的连接。当我们处理加密货币(例如比特币)时,与交易相关的详细信息被提供给散列算法(SHA-256),其结果是具有恒定长度的散列值,使用它我们无法猜测实际的数据是。由于所有这些块都相互链接,如果我们需要更改特定块中的数据,我们需要更改其前一个块中的数据,然后继续……。 .这就是区块链如何变得不可变以及其数据值得信赖的方式。

AWS S3 存储桶

AWS S3 存储桶使用 MD-5 哈希算法。这意味着每当我们尝试上传任何文件时,它都会首先通过 MD-5 代码并验证其完整性。如果验证失败,则意味着该值不是用户输入的值,从而导致错误消息以及存储对象的失败。

假设不同的用户需要存储桶中的某个文件,首先,特定用户要做的是在 AWS S3 中查找E 标签。之后,用户将获得下载文件的 MD 5 值并检查两者是否匹配。我们可以通过比较这两个值来检查对象的完整性,从而判断对象是否被篡改、在网络内或没有完全下载。

因此,我们可以通过散列上传或下载来了解文件上传背后的过程是否被篡改。

散列密码

每当我们输入任何帐户的密码时,它都会转换为与密码无关的字符串并存储在数据库中。因此,当用户想要注册一个需要他们选择密码的帐户时,而不是将这个密码存储为文本,它存储为一个用户输入的哈希值。为什么我们不应该将密码存储为文本?因为如果攻击者可以访问数据库,他会反过来访问用户可能用于不同帐户的真实密码(大多数网站警告不要在任何地方使用相同密码的原因)。当任何用户想要登录时,他们输入他们的密码,该密码被散列并与他们数据库中的值进行检查,以验证输入的密码是否正确。

代币化

信用卡令牌用于使用字母数字 ID 交换客户数据,该 ID 与帐户所有者没有明确的价值和关系。代币本身不包含任何有用的消费者数据。这些令牌具有用户数据存储在客户银行中的位置数据。例如,如果我们要检查令牌是否对应于卡片,只需将卡片的哈希值与令牌进行比较就足够了。此外,没有办法反转令牌,因为它没有存储在带有卡和令牌的表中。

拉宾-卡普算法

Michael O. Rabin 和 Richard Karp 制定了一种通过实现散列进行字符串搜索的方法,与常规的 O(MN) 相比,时间复杂度为 O( M + N )。它基本上用于搜索字符串。根据字符串的大小,我们继续计算模式的哈希值。一个是原始字符串,另一个是字符串中的字符序列,我们不断移动到字符串的末尾。一旦我们得到两个哈希值的匹配,我们需要再次检查原始字符串,因为不同的字符串可能具有相同的哈希值。我们继续这个直到我们到达字符串的末尾。