什么是 哈希?

哈希是一种数学函数,可将任意大小的输入数据转换为固定长度的字符串,生成一个几乎不可能逆向还原为原始数据的唯一数字指纹。

快速了解

全称哈希函数/散列
创建时间1979 年(Ralph Merkle 的博士论文)
规范文档官方规范

工作原理

哈希函数接收输入(或称「消息」)并返回固定大小的字节串,通常以十六进制数显示。输出称为哈希值、哈希码、摘要或简称哈希。哈希函数被设计为单向函数,这意味着从哈希输出重构输入在计算上是不可行的。加密哈希函数的关键特性包括:确定性(相同输入总是产生相同输出)、快速计算、抗原像攻击(无法从输出找到输入)、微小输入变化产生完全不同的输出(雪崩效应)以及抗碰撞性(难以找到两个不同输入具有相同哈希)。常见的哈希算法包括 MD5(现已被认为不安全)、SHA-1(已弃用于安全用途)、SHA-256(广泛使用)和 SHA-3。哈希是数据完整性验证、密码存储、数字签名和区块链技术的基础。

主要特点

  • 无论输入大小如何都产生固定长度输出
  • 单向函数 - 无法逆向找到原始输入
  • 确定性 - 相同输入始终产生相同哈希
  • 雪崩效应 - 微小输入变化产生完全不同的哈希
  • 抗碰撞性 - 极难找到两个具有相同哈希的输入
  • 对任何给定输入计算速度快

常见用途

  1. 密码存储和验证(配合加盐)
  2. 数据完整性验证(文件校验和)
  3. 数字签名和证书
  4. 区块链和加密货币挖矿
  5. 编程中的哈希表和数据结构

示例

loading...
Loading code...

常见问题

哈希和加密有什么区别?

哈希是一种单向函数,将数据转换为无法逆向还原的固定大小输出;而加密是一种双向过程,可以使用正确的密钥进行解密。哈希用于数据完整性验证和密码存储,而加密用于在传输或存储过程中保护数据机密性。

为什么 MD5 和 SHA-1 被认为是不安全的?

MD5 和 SHA-1 被认为不安全,因为研究人员已经证明了针对它们的实际碰撞攻击,这意味着两个不同的输入可以产生相同的哈希输出。在现代硬件上,MD5 碰撞可以在几秒内生成,而 SHA-1 在 2017 年被 Google 的 SHAttered 攻击破解。对于安全应用,应该使用 SHA-256 或 SHA-3。

什么是哈希碰撞,为什么它很重要?

哈希碰撞发生在两个不同的输入产生相同的哈希输出时。虽然对于任何哈希函数来说,碰撞在理论上都是可能的(因为无限的输入映射到有限的输出),但加密哈希函数被设计为使找到碰撞在计算上不可行。碰撞之所以重要,是因为它们可能被利用来伪造数字签名或绕过完整性检查。

什么是加盐,为什么它对密码哈希很重要?

加盐是在哈希之前向每个密码添加唯一随机值的做法。这可以防止攻击者使用预计算的彩虹表,并确保相同的密码产生不同的哈希值。如果没有加盐,获得密码哈希数据库的攻击者可以通过与已知哈希值进行比较轻松破解常见密码。

我应该为我的应用程序使用哪种哈希算法?

对于密码存储,请使用专门的算法,如 bcrypt、scrypt 或 Argon2,它们包含内置加盐并且故意设计得较慢。对于数据完整性和通用哈希,SHA-256 被广泛推荐。对于需要最新安全性的加密应用,SHA-3(Keccak)提供了另一种设计选择。避免将 MD5 和 SHA-1 用于任何安全敏感的应用程序。

相关工具

相关术语

相关文章