Как только я сгенерировал соль и испортил пароль (используя bcrypt и т. Д.), Было бы лучше сохранить результаты в виде строки или в виде байтового массива в базе данных? Есть ли какие-либо выгоды в любом случае? Или это более субъективное решение?Лучший способ хранения хэшированных паролей и значений солей в базе данных - varchar или двоичный?
Лучший способ хранения хэшированных паролей и значений солей в базе данных - varchar или двоичный?
ответ
VARCHAR должно быть достаточным. На мой взгляд, данные VARCHAR будут легче потреблять и работать с бинарными.
Встроенные поставщики услуг ASP.NET также хранят хэшированные пароли как поля VARCHAR.
Если вы используете VARCHAR, убедитесь, что байты являются допустимыми символами или заставляют байты использовать ASCII перед сохранением хеша и соли. Чтобы сделать безопаснее из-за повреждения данных, вы можете либо закодировать байты в Base64, либо в шестнадцатеричном виде, прежде чем хранить их в поле VARCHAR.
Например, если вы храните byte[]
выход из MD5 или SHA1 некоторых значений байт может быть удален или заменен, когда byte[]
преобразуются в текст, они не действителен UTF-8/Unicode. Это не должно быть проблемой, если вы используете ASCII, но все равно может привести к повреждению данных.
Если вы не хотите иметь дело с Hex, вы можете использовать этот метод base64 Convert.ToBase64String, который встроен в структуру.
Если вы используете VARBINARY и не пытаетесь использовать методы текстового кодирования, эта проблема не должна существовать, но может затруднить сравнение хэшей.
... Обратите внимание, что если вы используете NVARCHAR
это искажение данных может произойти еще ...
static void Main(string[] args)
{
var salt = "MySalt";
var password = "MyPassword";
var saltedKey = CalculateHash(salt, password);
Console.WriteLine(saltedKey);
// MySalt$teGOpFi57nENIRifSW3m1RQndiU=
var checkHash = CheckHash(saltedKey, password);
Console.WriteLine(checkHash);
// True
}
private static string CalculateHash(string saltOrSaltedKey, string password)
{
var salt =
saltOrSaltedKey.Contains('$')
? saltOrSaltedKey.Substring(0, saltOrSaltedKey.IndexOf('$') + 1)
: saltOrSaltedKey + '$';
var newKey = Encoding.UTF8.GetBytes(salt + password);
var sha1 = SHA1.Create();
sha1.Initialize();
var result = sha1.ComputeHash(newKey);
// if you replace this base64 version with one of the encoding
// classes this will become corrupt due to nulls and other
// control character values in the byte[]
var outval = salt + Convert.ToBase64String(result);
return outval;
}
private static bool CheckHash(string saltedKey, string password)
{
var outval = CalculateHash(saltedKey, password);
return outval == saltedKey;
}
большинство библиотек md5/sha1 возвращают хэши base64 закодирован в этом случае VARCHAR будет достаточно
- 1. Лучший способ хранения паролей в базе данных MYSQL
- 2. Лучший способ хранения массива битмаскированных значений в базе данных MySQL?
- 3. магазин хэшированных паролей к Mysql
- 4. Передача паролей, хэшей и солей через WCF
- 5. Лучший способ хранения значений
- 6. Каков правильный тип данных для хранения хэшированных паролей в mysql?
- 7. Лучший способ хранения данных в базе данных MySQL
- 8. Предпочтительный метод хранения паролей в базе данных
- 9. Лучший способ хранения будних дней в базе данных MySQL
- 10. Что такое хороший способ хранения хэшированных паролей для удобства чтения/manupulation во время тестов
- 11. Лучший способ хранить несколько паролей в базе данных
- 12. Сохранение хэшированных паролей - безопасно?
- 13. Итак, это правильный способ хранения паролей в базе данных?
- 14. Лучший способ хранения хэштегов и использования/комбинаций в базе данных
- 15. Лучший способ хранения нескольких флагов в базе данных
- 16. Лучший способ хранения данных
- 17. Лучший способ хранения данных человека (имя, фамилия) в базе данных
- 18. Лучший способ хранения «других» данных в базе данных MySQL
- 19. Обновление хэшированных паролей в Mongoose
- 20. Лучший способ хранения размера продукта/количества в базе данных?
- 21. лучший способ хранения данных опроса?
- 22. Лучший способ хранения нескольких выпадающих списков в базе данных?
- 23. Лучший способ хранения данных экзамена в базе данных
- 24. Лучший способ хранения различной статистики в базе данных
- 25. Лучший способ хранения данных результатов в базе данных?
- 26. Лучший способ для хранения значений enum в базе данных - String или Int
- 27. Безопасный способ хранения дешифруемых паролей в ruby
- 28. Лучший способ хранения столбца «один ко многим» в базе данных
- 29. Лучший способ обработки и хранения данных аналитики
- 30. Лучший способ для хранения электронного письма в базе данных
I Никогда не видел, чтобы кто-либо использовал НИКАКОГО, кроме стандартной строки varchar. – Layke