Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как хранить пароли? [D7, XP]


Страницы:   1 2

Alex_Ford ©   (2008-11-19 22:41:00) 

Добрый вечер!

Уважаемые мастера, подскажите пожалуйста, как в таблице хранить пароли, и осуществлять проверку

Я попытался так, но проверка осуществляется как бы по принципу "либо-либо"...... даже не знаю как правильно поставить вопрос.

Код:


procedure TForm5.SpeedButton1Click(Sender: TObject);
var i,j: integer;
begin
 if not (table1.Locate('user',edit1.Text,[loCaseInsensitive]))xor
        (table1.Locate('password',edit2.Text,[loCaseInsensitive]))then
    begin
    form2.showmodal;
    form1.close;


Ega23   (2008-11-20 17:18:00) [1]


> Тогда понятно. Это у тебя уже сила привычки.


Возможно..  :)


KilkennyCat   (2008-11-20 16:39:00) [2]


> 8 лет

Тогда понятно. Это у тебя уже сила привычки.


Anatoly Podgoretsky   (2008-11-20 15:28:00) [3]

> KilkennyCat  (20.11.2008 14:14:17)  [17]

Паяльник это сила!


Ega23   (2008-11-20 14:22:00) [4]


> Угу. Ну тогда я возьму бутылку водки и пассатижи. И ты мне
> сам расскажешь все пароли :)


Ну против терморектального криптоанализа никуда не попроёшь...  :)


> 50% программы - заумный код. Два килограмма оборудования(сканер
> сетчатки глаза, отпечатков пальцев, температуры задницы).
>  Служба безопасности. Ежеутренний инструктаж.


Откровенно говоря я 8 лет как раз для различных СБ и писАл.


KilkennyCat   (2008-11-20 14:14:00) [5]


> И тут ты уже вообще хрен поможешь, даже зная асм.


Угу. Ну тогда я возьму бутылку водки и пассатижи. И ты мне сам расскажешь все пароли :)

И что получается?
50% программы - заумный код. Два килограмма оборудования(сканер сетчатки глаза, отпечатков пальцев, температуры задницы). Служба безопасности. Ежеутренний инструктаж. Гипноустановка в мозгу. Ампула с цианидом в зубе.


Ega23   (2008-11-20 14:01:00) [6]


> 5 минут и я просто заставлю твою функцию при любом раскладе
> выдавать true.


Есть гораздо более остроумные способы.
Например, некие данные (срок действия пароля, права данного пользователя и т.п.) лежат в бд в виде зашифрованной строки, ключ к которой - и есть твой пароль. Отдельно в бд лежит CRC расшифрованной строки.
Таким образом, при введении пароля расшифровывается некая строка. При совпадении CRC она сериализуется в определённые поля сущности "Пользователь".
И тут ты уже вообще хрен поможешь, даже зная асм.


Anatoly Podgoretsky   (2008-11-20 13:53:00) [7]

> KilkennyCat  (20.11.2008 13:48:14)  [14]

Заначку не надо хранить в базе.


KilkennyCat   (2008-11-20 13:48:00) [8]


> Ega23 ©   (20.11.08 13:35) [13]


5 минут и я просто заставлю твою функцию при любом раскладе выдавать true.

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


Ega23   (2008-11-20 13:35:00) [9]


> и вот докажи мне, что мне необходимо что-то круче этого,
>  если что-то круче этого просто НЕНУЖНО.


5 минут, и твой 'hjgbjvfytey' будет вскрыт. А хэш будет искаться брутфорсом очень долго.
А если ещё сделать логин не менее 5 символов и писать хэш не от пароля, а от логин + пароль, или даже md5(md5(pwd) + login) - задолбаешься вскрывать. Брутфорс и очень долгий.


KilkennyCat   (2008-11-20 13:31:00) [10]

В тырнете тьма реализаций чего угодно.

теперь сравни с моим вариантом:

function CheckLogin(const Pwd : string) : Boolean;
begin
Result := Pwd = 'hjgbjvfytey';
end;


и вот докажи мне, что мне необходимо что-то круче этого, если что-то круче этого просто НЕНУЖНО.


Ega23   (2008-11-20 11:29:00) [11]


> А время разработки, оно что, даром?


function CheckLogin(const Login, Pwd : string; Conn : TADOConnection) : Boolean;
var
 param : TParameter;
begin
 Result := False;
 with TADODataSet.Create(nil) do
 begin
   try
     Connection := Conn;
     CommandText := 'select pwd from logins where upper(login)=?';
     param := Parameters.AddParameter;
     param.DataType = ftString;
     param.Direction := pdInput;
     param.Value := ANSIUpperCase(Login);

     try
       Open;
       Result := (Fields[0].AsString = MD5(Pwd));
     except

     end;
     
   finally
     Free;
   end;
 end;
end;


Реализаций md5 в тырнете - тьма.


KilkennyCat   (2008-11-20 11:17:00) [12]


> Ega23 ©   (20.11.08 10:06) [9]

А причем здесь время работы?
Да пусть оно хоть реактивно.
А время разработки, оно что, даром?


Ega23   (2008-11-20 10:06:00) [13]


> Далеко не всегда так уж прям нужно хэширование.


Построение md5 или crc от строки в (ну не знаю, в 20 символов) - это фигня. Миллисекунда. Дольше сравнение со значением в базе будет идти.

2 Автор.
Принцип такой: берёшь алгоритм хэширования (какой - дело твоё, их полно). При  заведении пользователя прогоняешь его пароль через данный алгоритм, получаешь хэш пароля. Его записываешь в базу.
При попытке соединения берёшь введённый логин пользователя, находишь по нему нужную запись в БД, берёшь введённый пароль пользователя, прогоняешь его через хэш-алгоритм и сравниваешь полученный хэш с тем, который лежит в БД.


Slym   (2008-11-20 09:36:00) [14]

Alex_Ford   (19.11.08 22:41)
'password',edit2.Text,[ loCaseInsensitive]))

CaseInsensitive - непорядок!
лучше

Query.SQL.Text:="SELECT (Count(Name)>0) AS Login
FROM Users
WHERE ((Name= :User) and (Password= :Password));";
Query.Papams[0].Value:='Admin';
Query.Papams[1].Value:='qWeRtY';
Query.Open;
if not Query.Fields[0].asBoolean then raise Exception.Create('Fuck off!');


Anatoly Podgoretsky   (2008-11-20 09:16:00) [15]

> KilkennyCat  (20.11.2008 0:41:05)  [5]

В качестве хеша может выступать CRCx


Германн   (2008-11-20 01:12:00) [16]


> Ибо задача примитивна - разграничить доступ администратора
> и оператора, дабы оператор не сбил настройки. Операторами
> данной программы предполагаются быть люди с уровнем компьютерной
> грамотности на уровне данной программы.

+1


KilkennyCat   (2008-11-20 00:41:00) [17]

Прежде чем выбирать метод защиты, сначала нужно оценить степень защиты.
Далеко не всегда так уж прям нужно хэширование.
В моей, например, текущей программке пароли примитивно хранятся в файле настроек, представляющий собой просто текстовый файл.
Ибо задача примитивна - разграничить доступ администратора и оператора, дабы оператор не сбил настройки. Операторами данной программы предполагаются быть люди с уровнем компьютерной грамотности на уровне данной программы.  Да и в случае неправомочного изменения настроек ничего серъезного не произойдет.
Городить хэширование сюда... упаси кто-там-на-небеси.


Юрий Зотов   (2008-11-19 23:22:00) [18]

> Alex_Ford   (19.11.08 22:47) [2]

В Сети легко найти и справку по слову "хэш", и готовые хэш-функции.

Либо [3].


Sergey13   (2008-11-19 23:08:00) [19]

> [0] Alex_Ford   (19.11.08 22:41)

Надо выбирать СУБД которая это умеет делать без участия программиста.


Alex_Ford   (2008-11-19 22:47:00) [20]

А как это сделать? Я впервые с этим сталкиваюсь.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо