1

我想建立一个身份验证系统,每个用户都有自己的盐 - 每个密码都用它所属的用户的盐进行哈希处理。

我应该如何设计数据库模式?

这是我想出的一个设计,但我不确定,这hash取决于salt这违反了第三范式

users(id, salt, hash, ...)
4

2 回答 2

1

虽然我不是遵守规范化规则的坚持者,但我了解您来自哪里。

要删除有问题的列并保留其功能,您可以考虑简单地将盐和哈希连接到一个字段中;如果一个或两个值保持相同的长度,则不需要分隔符。

或者,您可以使用 Bcrypt 作为您的密码哈希:哈希采用随机盐以及密码和成本因子;它会生成一个长字符串,您可以将其存储在密码字段中。查看 ircmaxell 的博客,了解他在这个主题上的工作。

于 2012-10-15T13:44:58.557 回答
0

你的设计很好。很多系统都使用这个想法。它并没有完全破坏 3NF,因为 Hash 并不严格依赖(可以这么说)盐,它只是从中计算出来的(连同密码)。

于 2012-10-15T11:24:11.703 回答