设计一个数据库,每个用户都有自己的盐

时间:2012-10-15 10:53:49

标签: mysql database authentication normalization

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

我应该如何设计数据库架构?

这是我提出的设计,但我不确定,因为hash取决于salt,这违反了third normal form

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

2 个答案:

答案 0 :(得分:1)

虽然我不是遵守规范化规则的坚持者,但我知道你来自哪里。

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

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

答案 1 :(得分:0)

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