n.b。我不是加密专家(这就是为什么我使用像NaCl这样的库)。
根据我对此主题的介绍,在数据库中存储用户密码的最安全方法是存储用于生成该哈希的哈希和salt。我决定使用libsodium-net来达到这个目的,但现在我在主题中留下了问题:我不需要生成和储存盐吗?我问因为libsodium-net包含这些功能:
// this uses the default Strength.Interactive hashing algorithm
var hash = PasswordHash.ScryptHashString(password);
var isValid = PasswordHash.ScryptHashStringVerify(hash, password);
在生成或验证哈希时,似乎不需要使用salt。事实上,没有ScryptHashString和ScryptHashStringVerify的重载方法接受盐。我觉得我在这里遗漏了一些明显的东西。我呢?或者libsodium-net是否排除了对盐的需求?
答案 0 :(得分:4)
答案在documentation。从PasswordHash.ScriptHashString(password)返回的字符串包含salt(以及其他几个参数),因此无需单独存储salt。