哈希(Hash)的详细介绍

1. Hash 的概念

        ~~~~~~~        Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的 输入 (又叫做预映射pre-image)通过散列算法变换成固定长度的 输出 ,该输出就是散列值。 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。(逆推是不行的啦就是说)

2. Hash 的特点

  1. 唯一性:对于任何给定的输入,哈希算法都能够生成唯一的哈希值。如果输入有所更改,即使只是改动了一个比特位,其哈希值也会发生明显的变化。

  2. 固定性:哈希算法将任意长度的输入映射为固定长度的哈希值,因此生成的哈希值的长度是固定的。例如,SHA-256算法生成的哈希值的长度总是256位。

  3. 不可逆性:哈希算法是一种单向函数,无法从哈希值推导出原始输入。因此,哈希算法可以用于存储密码,以保护用户密码不被泄露。

  4. 确定性:给定相同的输入,哈希算法总是能够生成相同的哈希值。这使得哈希算法可以用于数据完整性验证和数字签名等应用场景。

  5. 散列性:哈希算法的输出值看起来是随机的,而且将相似的输入映射为截然不同的哈希值,即使只有一点微小的变化。这种特性使哈希算法在散列数据、随机化和密码学安全方面非常有用。

3. Hash 的使用场景

  1. 数据完整性验证:哈希算法可以用于验证数据在传输或存储过程中是否被篡改。当数据被传输或存储时,将原始数据进行哈希,并将哈希值与接收到的数据进行比较。如果两个哈希值不同,则说明数据已被篡改。

  2. 密码存储:哈希算法可以用于存储用户密码,以确保在数据库泄露的情况下,黑客无法直接获取用户密码。将用户密码与随机生成的盐值一起哈希,然后将哈希值存储在数据库中。当用户尝试登录时,将输入的密码与存储的哈希值进行比较。如果哈希值匹配,则说明输入的密码是正确的。

  3. 数字签名:哈希算法可以用于生成数字签名,以确保数据的真实性和完整性。发送方使用私钥对数据进行哈希和签名,并将签名与数据一起发送。接收方使用公钥对签名进行验证,以确保数据未被篡改和真实的来源。

  4. 哈希表:哈希算法可以用于实现哈希表数据结构,以提高数据查找和访问的效率。哈希表将数据存储在数组中,并使用哈希函数将键映射到数组的索引。这样,可以快速地根据键查找和访问数据。

补充:哈希在区块链技术中的重要性

区块链是一种去中心化的分布式数据库,它通过不断添加新的数据块来记录和维护数据的完整性和安全性。每个数据块包含一个或多个交易记录,每个交易记录都包含一些重要信息,例如交易金额、参与者地址、时间戳等。

        ~~~~~~~        为了确保区块链中的交易记录不被篡改,每个区块都会使用哈希算法计算出一个唯一的哈希值,并将其包含在下一个区块中。这个哈希值是由该区块内的所有交易记录、上一个区块的哈希值、时间戳等信息组成,因此,只要区块链中的任何一个交易记录发生变化,其对应的哈希值就会发生变化。这样一来,就可以通过检查每个区块的哈希值来验证整个区块链是否被篡改过。

4. 哈希碰撞

        ~~~~~~~        有的朋友可能会意识到,既然哈希是将任何长度的输入压缩为固定长度的输出,因此理论上会存在两个不同的输入,但是哈希值却相同的情况,事实也确实是这样的,这种情况被称为哈希碰撞(Hash Collision)。

        ~~~~~~~        虽然哈希碰撞是可能发生的,但通常情况下,使用强大的哈希算法,如SHA-3、BLAKE2等,可以大大减小哈希碰撞的概率,使其变得非常罕见。此外,为了进一步降低哈希碰撞的风险,还可以采用一些技术,如加盐(Salt)(在原始数据上添加一些额外的随机数据进行哈希,以增加破解的难度)和迭代哈希(Iterated Hashing)。

5.用python计算哈希

        ~~~~~~~        在Python中,字符串是以Unicode字符集表示的,而哈希算法通常是针对字节序列计算哈希值的。因此,对于字符串类型的输入,需要将其编码为字节序列,才能进行哈希计算。**message.encode()**是Python中字符串对象的一个方法,用于将字符串编码为指定的字节序列。

import hashlib

message = "Hello World"
hash_object = hashlib.md5(message.encode())
hash_value = hash_object.hexdigest()

print("Message:", message) # >> Message: Hello World
print("Hash Value:", hash_value) # >> Hash Value: b10a8db164e0754105b7a99be72e3fe5

        ~~~~~~~        在哈希算法计算出哈希值后,通常需要将其输出为一种可读的格式,以方便使用和存储。**hash_object.hexdigest()**是Python中哈希对象的一个方法,用于以十六进制字符串的形式输出哈希值。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值