如何安全地存储密码在数据库中?
不要做的事情
- 在数据库中以明文存储密码是不明智的,因为任何内部人员都可以看到它们。
- 直接存储密码哈希也是不够的,因为它容易受到预计算攻击(precomputation attacks),比如彩虹表(rainbow tables)攻击。
为了减轻预计算攻击,我们对密码进行加盐处理。
𝐖𝐡𝐚𝐭 𝐢𝐬 𝐬𝐚𝐥𝐭?
根据 OWASP 指南,“盐是作为哈希过程的一部分添加到每个密码中随机生成的唯一的字符串”。
𝐇𝐨𝐰 𝐭𝐨 𝐬𝐭𝐨𝐫𝐞 𝐚 𝐩𝐚𝐬𝐬𝐰𝐨𝐫𝐝 𝐚𝐧𝐝 𝐬𝐚𝐥𝐭?
- 盐不是必须保密的,可以以明文形式存储在数据库中。它用于确保哈希结果对每个密码都是唯一的。
- 可以使用以下格式将密码存储在数据库中: 𝘩𝘢𝘴𝘩( 𝘱𝘢𝘴𝘴𝘸𝘰𝘳𝘥 + 𝘴𝘢𝘭𝘵)。
𝐇𝐨𝐰 𝐭𝐨 𝐯𝐚𝐥𝐢𝐝𝐚𝐭𝐞 𝐚 𝐩𝐚𝐬𝐬𝐰𝐨𝐫𝐝?
要验证密码,可以进行以下过程:
-
客户输入密码。
-
系统从数据库中获取相应的盐。
-
系统将盐附加到密码上并对其进行哈希。我们将哈希值称为 H1。
-
系统比较 H1 和 H2,其中 H2 是存储在数据库中的哈希。如果它们相同,则密码有效。










网友评论