C# 使用LibNa net时,我是否不需要生成和存储盐?

C# 使用LibNa net时,我是否不需要生成和存储盐?,c#,cryptography,libsodium,C#,Cryptography,Libsodium,n、 b.我不是密码专家(这就是为什么我使用像NaCl这样的库) 根据我在这方面的阅读,在数据库中存储用户密码的最安全的方法是存储散列和用于生成散列的salt。我决定使用LibNa-net来实现这个目的,但现在我的问题是:我不需要生成和存储盐吗?我这样问是因为LibNet包含以下功能: // this uses the default Strength.Interactive hashing algorithm var hash = PasswordHash.ScryptHashString(p

n、 b.我不是密码专家(这就是为什么我使用像NaCl这样的库)

根据我在这方面的阅读,在数据库中存储用户密码的最安全的方法是存储散列和用于生成散列的salt。我决定使用LibNa-net来实现这个目的,但现在我的问题是:我不需要生成和存储盐吗?我这样问是因为LibNet包含以下功能:

// this uses the default Strength.Interactive hashing algorithm
var hash = PasswordHash.ScryptHashString(password);
var isValid = PasswordHash.ScryptHashStringVerify(hash, password);

生成或验证哈希时,似乎不需要使用salt。事实上,没有重载的ScryptHashString和ScryptHashStringVerify方法接受salt。我觉得我错过了一些明显的东西。是吗?或者LibNa net是否消除了对盐的需求?

答案就在后面。从PasswordHash返回的字符串。ScriptHashString(password)包含salt(和几个其他参数),因此不需要单独存储salt。

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