我想建立一个身份验证系统,每个用户都有自己的盐 - 每个密码都用它所属的用户的盐进行哈希处理。
我应该如何设计数据库模式?
这是我想出的一个设计,但我不确定,这hash
取决于salt
这违反了第三范式:
users(id, salt, hash, ...)
我想建立一个身份验证系统,每个用户都有自己的盐 - 每个密码都用它所属的用户的盐进行哈希处理。
我应该如何设计数据库模式?
这是我想出的一个设计,但我不确定,这hash
取决于salt
这违反了第三范式:
users(id, salt, hash, ...)
虽然我不是遵守规范化规则的坚持者,但我了解您来自哪里。
要删除有问题的列并保留其功能,您可以考虑简单地将盐和哈希连接到一个字段中;如果一个或两个值保持相同的长度,则不需要分隔符。
或者,您可以使用 Bcrypt 作为您的密码哈希:哈希采用随机盐以及密码和成本因子;它会生成一个长字符串,您可以将其存储在密码字段中。查看 ircmaxell 的博客,了解他在这个主题上的工作。
你的设计很好。很多系统都使用这个想法。它并没有完全破坏 3NF,因为 Hash 并不严格依赖(可以这么说)盐,它只是从中计算出来的(连同密码)。