Зашифруйте логин и пароль в базе данных sqlite - SHA 256 в C # - PullRequest
4 голосов
/ 22 ноября 2011

Я хочу хранить логин и пароль в базе данных sqlite.Эта база данных зашифрована с использованием библиотеки SQLCipher.Но пароль для шифрования базы данных является отдельной проблемой.Этот пароль хранится в коде приложения.Логин и пароль предоставляются пользователем для входа в приложение.В C # есть класс SHA256.Если я использую этот класс, если этого достаточно?Или, скорее, я должен использовать хэш и соль или другие методы?

Спасибо

1 Ответ

9 голосов
/ 22 ноября 2011

Чтобы сохранить пароль пользователя в базе данных для входа в систему, вы должны использовать хеш-функцию с солью.

SHA 256 - один из них, но существуют и лучшие. Я рекомендую вам использовать производную функцию PBKDF2. Вы можете реализовать свой собственный метод хеширования PBKDF2, используя класс Rfc2898DeriveBytes, предоставленный в .NET Framework.

Вот быстрый как это сделать :

int saltSize = 256;     // Number of bytes of the salt
int iterations = 1000;  // Number of times we iterate the function
                        // The more we iterate, the more it is gonna take time.
                        //     The advantage of a great iterations number is to 
                        //     make brutforce attack more painful.
int hashSize = 20;      // Number of bytes of the hash (the output)

var deriveBytes = new Rfc2898DeriveBytes("mypassword", saltSize, iterations);
byte[] salt = deriveBytes.Salt;
byte[] hash = deriveBytes.GetBytes(hashSize);

Вам осталось только сохранить соль и хеш в вашей базе данных. Используйте Convert.FromBase64String и Convert.ToBase64String, чтобы получить string от byte[] и наоборот.


Другой альтернативой является использование bcrypt. Смотрите эту интересную статью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...