无需登录 数据私有 本地保存

密码加盐哈希模拟 - 理解密码存储

15
0
0
0

密码加盐哈希模拟器

直观理解密码如何通过盐值(Salt)哈希算法安全存储, 模拟注册与登录的完整流程,认识加盐的重要性。

步骤一:模拟注册 - 生成哈希

输入密码,系统自动加盐并计算哈希值存入"数据库"

盐值自动使用加密安全随机数生成(128位),也可手动编辑
多轮哈希增加暴力破解成本(类似bcrypt)
等待输入密码...
密码 + 盐值 组合 哈希函数 存储值

点击后将哈希值保存到模拟数据库,供登录验证使用

步骤二:模拟登录 - 验证密码

使用已存储的盐值和哈希,验证输入的密码是否匹配

-- 等待注册,暂无数据 --
输入密码后系统将使用相同的盐值和算法重新哈希并比对
请先在左侧完成注册模拟
等待验证...
对比演示:相同密码 + 不同盐值 = 完全不同的哈希

这说明即使两个用户使用相同的密码,由于盐值不同,攻击者也无法通过哈希值判断密码是否相同

场景 密码 盐值 算法 最终哈希(前24字符) 是否相同
用户 A - - - - -
用户 B - - - - -
使用相同密码但不同盐值生成两个哈希
常见问题与知识点
什么是盐值(Salt)?

盐值是在密码哈希前追加或插入到密码中的一段随机字符串。它确保即使两个用户使用完全相同的密码,最终存储的哈希值也完全不同。盐值通常与哈希值一起存储,不需要保密。

为什么需要加盐?

不加盐时,相同密码产生相同哈希。攻击者可以使用彩虹表(预计算的密码→哈希映射表)快速破解大量密码。加盐后,每条记录都需要单独破解,极大增加了攻击成本。

什么是彩虹表攻击?

彩虹表是一种时间-空间权衡的密码破解技术。攻击者预先计算大量常见密码的哈希值并存储在表中。遇到泄露的哈希值时,直接查表即可找到原始密码。加盐使得预计算无效,因为每个盐值都需要单独的彩虹表。

应该使用什么哈希算法?

密码存储应使用专门的密码哈希函数bcryptscryptArgon2。这些算法内置盐值、多轮迭代、内存/时间成本控制。SHA-256等通用哈希函数计算太快,不适合直接用于密码存储(但加盐多轮迭代后可接受)。

盐值需要保密吗?

不需要。盐值通常与哈希值一起明文存储在数据库中(如$algorithm$salt$hash格式)。盐值的作用是防止预计算攻击(彩虹表),而非增加密码破解的单次难度。即使攻击者知道盐值,仍需为每个用户单独暴力破解。

为什么需要多轮迭代哈希?

单次哈希计算速度极快(微秒级),攻击者可以每秒尝试数十亿个密码。通过数千甚至数万次迭代(如bcrypt的成本因子),每次密码验证耗时增加到数十毫秒,用户无感知,但攻击者暴力破解速度被极大降低。

MD5和SHA-1还能用吗?

绝对不能用于密码存储。MD5和SHA-1已被证明存在碰撞漏洞,且计算速度极快,极易被暴力破解。即使是加盐的MD5也不安全。请使用bcrypt、scrypt或Argon2等现代密码哈希算法。

登录时如何验证密码?

1) 用户输入密码 → 2) 从数据库取出该用户的盐值 → 3) 使用相同的盐值和算法对输入密码重新哈希 → 4) 比对计算结果与存储的哈希值 → 5) 相同则验证通过。整个过程不存储原始密码