2016-03-08 40 views
2

n.b.我不是一个加密专家(这就是为什么我使用像NaCl这样的库)。使用libsodium-net时,我不需要生成和存储盐吗?

从我读到的主题来看,将用户密码存储在数据库中最安全的方法是存储散列和用于生成散列的盐。我决定使用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可以避免使用盐吗?

回答

3

答案在documentation。从PasswordHash.ScriptHashString(password)返回的字符串包含salt(以及其他一些参数),因此不需要单独存储盐。

+2

是正确的。您不需要存储盐或其他参数(最大内存和最大操作数)。一切已经存储在返回的字符串中。盐本身是由'ScryptHashString()'自动生成的。 –

相关问题