专栏名称: 新语数据故事汇
《新语数据故事汇,数说新语》科普数据科学、讲述数据故事,深层次挖掘数据价值。
目录
相关文章推荐
商学院  ·  新刊热卖 | ... ·  18 小时前  
商学院  ·  新刊热卖 | ... ·  18 小时前  
51好读  ›  专栏  ›  新语数据故事汇

一文带您了解Hash:Python 中的哈希

新语数据故事汇  · 公众号  ·  · 2024-10-20 14:36

正文

哈希(Hash)是一种将数据转换为固定大小的字符串或数字的过程,这个结果通常被称为哈希值或哈希码。在计算机科学中,哈希广泛用于数据存储、查找、验证等场景。哈希函数被设计用来均匀分布数据,使得数据搜索和存储更加高效。无论是在构建高效的数据结构如哈希表、字典、集合,还是在确保数据完整性与安全性(如密码存储和加密算法)方面,哈希技术都扮演着至关重要的角色。

接下来我们了解Python中的哈希(Hash),包括哈希函数(hash functions)、代码示例以及实际应用案例。

哈希(Hashing)简介

哈希(Hash)是一种将数据转换为固定大小字符串或数字的过程,这个结果通常被称为哈希值或哈希码。哈希函数的设计目标是均匀地分布数据,从而提升数据的搜索、存储和验证效率。在计算机科学中,哈希在数据索引和检索中起着至关重要的作用。它被广泛应用于哈希表、字典和集合等数据结构中,用于快速查找。此外,哈希还用于确保数据的完整性,防止信息被篡改,同时在密码存储等敏感信息的安全性方面发挥关键作用。由此可见,哈希在计算机科学中的应用极为广泛且重要。

哈希的常见应用包括:

  • 数据存储 :哈希用于哈希表中,实现高效的数据存储和快速检索。

  • 数据完整性 :通过生成唯一的哈希值,哈希可以确保数据在传输或存储过程中未被篡改。

  • 安全性 :在密码存储和加密算法中,哈希是确保数据安全的核心技术。

理解哈希函数(Hash Function)

哈希函数(Hash Function)接收输入并生成一个固定大小的哈希码。一个好的哈希函数应确保不同的输入生成唯一的哈希值,并将数据均匀分布在可用的哈希空间中。

好的哈希函数的特性

  • 确定性 :相同的输入总是生成相同的输出。

  • 快速 :哈希函数应能够快速计算出哈希值。

  • 均匀分布 :哈希值应均匀分布,避免出现集中的数据点。

  • 最小化冲突 :不同的输入应尽量避免生成相同的哈希值(即碰撞)。

Python 提供了内置的 hash() 函数,用于生成对象的哈希值。

哈希冲突:原因及处理

哈希冲突是指两个不同的输入生成了相同的哈希值。由于哈希函数的输出大小是固定的,而输入可以是任意大小的数据,因此特别是在处理大数据集时,始终存在发生冲突的可能性。

哈希冲突的原因

  • 有限的哈希空间 :哈希函数在有限的范围内生成哈希值,这意味着不同的输入可能映射到相同的哈希值。

  • 哈希函数设计不良 :设计不合理的哈希函数可能无法均匀分布哈希值,导致较高的冲突率。

我们看一个使用Python内置的 hash() 函数时导致冲突的例子(虽然这种情况不常见):

print("hash('☺')  :",hash('☺'))  # 9786print("hash(':&') :",hash(':&'))hash('☺') == hash(':&')

当哈希冲突发生时,有几种常见的处理方法:

  • 链式法 (Chaining) :在这种方法中,所有哈希到相同值的元素被存储在一个链表或其他数据结构中。因此,所有发生冲突的元素共享哈希表中的同一索引,但仍然可以通过遍历链表来访问。

  • 开放寻址法 (Open Addressing) :该方法不在单个索引处存储多个值,而是当冲突发生时,哈希表会寻找下一个可用的插槽(地址)来存储冲突的元素。

哈希算法

哈希算法是哈希过程的核心,决定了输入数据如何被转换为固定大小的哈希值。常见的哈希算法各自具有不同的特性、用途和安全级别。以下是最常用的哈希算法、在 Python 中使用 hashlib 库进行示例。

MD5( Message Digest Algorithm 5 ):

  • 输出长度 :128 位哈希值(16 字节)。

  • 使用场景 :最初用于数据完整性检查和加密,但由于易于发生哈希冲突,现已不适用于加密用途。

  • 常见应用 :非安全相关的校验和,如生成文件的校验码以验证完整性。

SHA-1( Secure Hash Algorithm 1 ):
  • 输出长度 :160 位哈希值(20 字节)。

  • 使用场景 :最初作为美国政府数字签名算法的一部分,但由于存在碰撞漏洞,现已不再推荐用于加密。

  • 常见应用 :遗留系统或安全性要求不高的应用中使用,但通常已不再推荐使用。

SHA-256(Secure Hash Algorithm 256):
  • 输出长度 :256 位哈希值(32 字节)。

  • 使用场景 :作为 SHA-2 家族的一部分,SHA-256 目前是最广泛使用且安全的加密哈希算法之一。

  • 常见应用 :加密、区块链技术、密码等敏感信息的安全防护。

这些哈希算法通过应用一系列数学运算(如位移、逻辑运算(如异或)和消息压缩)处理输入数据。每个算法为每个输入生成唯一的固定大小输出(哈希),并且设计时确保即使输入有极小的变化,也会产生完全不同的哈希值。

示例1: Hashing with MD5

import hashlib
md5_hash = hashlib.md5()md5_hash.update(b"Hello, World!")print(f"MD5 Hash: {md5_hash.hexdigest()}")

示例2: Hashing with SHA-1

import






请到「今天看啥」查看全文