2016-03-08 3 views
2

n.b. Я не специалист по криптографии (именно поэтому я использую библиотеку, такую ​​как NaCl).При использовании libsodium-net мне не нужно создавать и хранить соли?

Из того, что я прочитал на эту тему, самый надежный способ хранения пользовательских паролей в базе данных - хранить хэш и соль, используемые для генерации этого хэша. Я решил использовать libsodium-net для этой цели, но теперь у меня остается вопрос в теме: мне не нужно создавать и хранить соли? Я спрашиваю, потому что libsodium-сеть включает в себя следующие функции:

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

Там не кажется, необходимость использования соли, когда либо производящий или проверка хэша. На самом деле, нет перегруженных методов ScryptHashString и ScryptHashStringVerify, которые принимают соль. Я чувствую, что мне не хватает чего-то очевидного здесь. Я? Или libsodium-net устраняет необходимость в солях?

ответ

3

Ответ в documentation. Строка, возвращаемая из PasswordHash.ScriptHashString (пароль) содержит соль (и пару других параметров), поэтому нет необходимости хранить соль отдельно.

+2

является правильным. Вам не нужно сохранять соль и другие параметры (максимальная память и максимальная скорость). Все уже сохранено в возвращаемой строке. Сама соль автоматически генерируется 'ScryptHashString()'. –