好的,我知道这可能非常简单,但我似乎找不到一个直接的答案。假设我有以下代码:
Password: "mypassword"
Salt: 1234567
盐值的概念是指像 hash(password + salt)
或者 hash(password) + salt
这样的操作吗?我猜只有前者才有任何意义,但我想确认一下我没有遗漏什么。
请原谅我的无知。
没错,它是前者。
如果您只是简单地串联盐和哈希,则攻击者可以轻松删除“盐”并使用彩虹表。通过将明文+盐进行哈希,就无法因子分解盐。
实际上,它是盐 + 哈希(盐+密码)
(盐是哈希计算的一部分 - 但必须保持明文)
哈希(password + salt)。如果在哈希之后连接盐,那么连接很容易被反转,并且不会增加任何反转密码哈希的难度(使用彩虹表)。
话虽如此,有些系统同时执行两个步骤,例如Django将salt$hash(salt+password)存储在数据库中。这只是为了确保检查密码与哈希的每个数据都可以在一个地方找到。
为了完整起见,我在这个问题中添加了这些链接 - 这个咸哈希话题需要对进入其中的主题有广泛的理解,以避免昂贵的错误。
这里未能完全表达的一个关键点是必须为每个密码使用唯一的盐。要了解详情,请阅读链接的内容。
为什么使每个盐都是唯一的:加盐你的密码:最佳实践?
这个话题的广泛概述:盐生成和开源软件
盐应该是哈希计算的一部分