2015-03-22 2 views
0

У меня есть приложение в C# и база данных в SQLite. В базе данных у меня есть таблица с несколькими столбцами. В одной из столбцов у меня есть значение, которое зашифровывается с помощью SHA1 из запроса. Но мне нужно, чтобы использовать его в моей C# приложение, как это:C# SQLite encryption hashing SHA1

cmd.CommandText = "Select * from accounts where ([email protected] and password=sha1(@password));"; 

нужно выбрать строковое значение, для входа в приложение. Я получаю ошибку: no such function sha1.

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

+0

Используйте 'Select * из учетных записей, где (имя пользователя = @ имя пользователя и пароль = @ пароль);' и связывают хешированное значение для '@ password' – dvhh

+2

И в большинстве случаев используется хэш-функция, такая как' SHA1', небезопасны для хранения пароля, узнайте о [ключевой функции деривации] (http://en.wikipedia.org/wiki/Key_derivation_function), которые считаются более защищенными для хранения паролей. – dvhh

+0

Вы имеете в виду следующее: 'cmd.Parameters.AddWithValue (« sha1 (@password) », пароль);' или 'cmd.Parameters.AddWithValue (sha1 (« @ password »), пароль);' ?? – dpaul1994

ответ

1

Поскольку SQLite не выполняет никакой функции sha1 по умолчанию, вам нужно будет переместить хэширование пароля из запроса SQL SQL к вашему коду.

Значение Ваш запрос должен быть:

cmd.CommandText = "Select * from accounts where ([email protected] and [email protected]);"; 

и вы должны передать пароль, как это:

cmd.Parameters.AddWithValue("@password", sha1(password)); 

И вы должны реализовать свою собственную sha1 функцию

using System.Security.Cryptography; 

... 

string sha1(string input) { 
    byte[] byteArray = Encoding.UTF8.GetBytes(input); 
    string result=""; 
    using (HashAlgorithm hash = SHA1.Create()) { 
     result=Convert.ToBase64String(hash.ComputeHash(byteArray)); 
    } 
    return result; 
} 

Важно

Использование функции хэширования считается вполне достаточным небезопасным для хранения пароля, вы должны подумать о том, как узнать о Key Derivation function, чтение страниц в Википедии приведет к реализации таких функций C#.

+0

Я вижу. Хорошо, спасибо, спасибо. – dpaul1994

+0

Одна из проблем, я попробовал только для своего любопытства использовать sha1 с этим 'stirng sha1 (string input) {}', но я получаю ошибку: 'sha1 (string) - это метод, который недействителен в данном контексте ". Зачем? – dpaul1994

+0

Извините за имя конфликта, я внесла поправки в свой ответ – dvhh