![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранение паролей
Пантелеев Иван © (2005-08-13 00:10:00)Я знаю что можно хранить пароли к программе в ini файлах, реестре, но проблема в том что там их может посмотреть любой, есть ли более координальный способ хранения паролей?
Antonn (2005-08-17 05:40:00) [1]Пантелеев Иван (17.08.05 0:58) [42]
первая процедура сохраняет имя и пароль (в edit1.Text имя, в edit2.Text - пароль):
SavePassword(edit1.Text,edit2.Text);
вторая функция проверяет его:
ifCheckPassword(edit1.Text,edit2.Text) then
//проверку прошла
else
//проверку не прошла
Германн © (17.08.05 1:27) [44]
там запятая есть...
KilkennyCat © (17.08.05 1:31) [45]
О чем уже неоднократно говорилось: печатайте читабельно! и пользуйтесь < СODE > < /CODE >
я пытался, просто про Code забыл
KilkennyCat (2005-08-17 01:31:00) [2]
> [44] Германн © (17.08.05 01:27)
в описании 2 параметра, просто форматирование отсутствует. О чем уже неоднократно говорилось: печатайте читабельно! и пользуйтесь < СODE > < /CODE >
Германн (2005-08-17 01:27:00) [3]2 Пантелеев Иван (17.08.05 00:58) [42]
>Antonn © (16.08.05 08:55) [37]
>Всё скомпилировалось - только вот я чего-то не совсем понимаю >что делает этот код.
Я тоже не понимаю, "что делает этот код"?
Но я и не понимаю как могло "Всё скомпилироваться", если в B>описании функции CheckPassword- один параметр, а в использовании- два?
Пантелеев Иван (2005-08-17 00:59:00) [4]Antonn © (16.08.05 08:55) [37]
Всё скомпилировалось - только вот я чего-то не совсем понимаю что делает этот код.
Пантелеев Иван (2005-08-17 00:58:00) [5]Antonn © (16.08.05 08:55) [37]
Всё скомпилировалось - только вот я чего-то не совсем понимаю что делает этот код.
Antonn (2005-08-16 16:10:00) [6]Пантелеев Иван (16.08.05 13:16) [38]
Delphi не может найти TPassElement!
тьфу, елки, забыл:)
type
TPassElement = record
_name:shortstring;
_pass:shortstring;
end;
KilkennyCat © (16.08.05 13:26) [39]
а ловеркэйс-то зачем? чтоб менее надежно было?
так инетресней, не навижу регистры:)
KilkennyCat © (16.08.05 13:29) [40]
ну и ладно, можно подумать [34] сложнее:)))
KilkennyCat (2005-08-16 13:29:00) [7]и с точки зрения надежности от взлома: все, что надо найти и обойти, это -
if (lowercase(_name)=lowercase(pe._name))and(lowercase(pass)=lowercase(pe._pass)) then
Что не сложнее разобрать проксоренный пароль.
KilkennyCat (2005-08-16 13:26:00) [8]
> Antonn © (16.08.05 08:55)
а ловеркэйс-то зачем? чтоб менее надежно было?
Пантелеев Иван (2005-08-16 13:16:00) [9]Delphi не может найти TPassElement!
Antonn (2005-08-16 08:55:00) [10]Пантелеев Иван (16.08.05 1:01) [34]
Примерно так (только вместо пароля можно сохранять хеш, и шифровать перед сохранением):
procedureTForm1.SavePassword(_name,pass: string);
var_MM:TMemoryStream; PE:TPassElement;
begin
_MM:=TMemoryStream.Create;
try
PE._name:=_name;
PE._pass:=pass;
_mm.Write(pe,sizeof(TPassElement));
_mm.SaveToFile(extractfilepath(application.ExeName)+'key');
finally
_mm.Free;
end;
end;
functionTForm1.CheckPassword(_name,pass: string):boolean;
var_MM:TMemoryStream; PE:TPassElement;
begin
result:=false;
_MM:=TMemoryStream.Create;
try
iffileexists(extractfilepath(application.ExeName)+'key') then begin
_mm.LoadFromFile(extractfilepath(application.ExeName)+'key');
_mm.Read(pe,sizeof(TPassElement));
if(lowercase(_name)=lowercase(pe._name)) and(lowercase(pass)=lowercase(pe._pass)) then
result:=true;
end;
finally
_mm.Free;
end;
end;
использование:
ifCheckPassword(edit1.Text,edit2.Text) then
KilkennyCat (2005-08-16 08:14:00) [11]
> [35] Германн © (16.08.05 02:02)
Да, надо было в БД переместить. Или ВыньАПИ.
Германн (2005-08-16 02:02:00) [12]Чёрт бы побрал того, кто разместил сию ветку в конфе "Начинающие"!
Пантелеев Иван (2005-08-16 01:01:00) [13]Кефир87 © (15.08.05 21:24) [33]
А можно инструкцию как сделать бинарный файл?
У меня идёт проверка пароля в Edit'е что-то типа этого:
if Edit1.Text <> 'Пароль' then ...
Кефир87 (2005-08-15 21:24:00) [14]
> 2. Хранить все в бинарном файле, там же проксореный пароль.
Ну я это и предлогаю. Конечно способ не надежный для серьезных проэктов. Я просто предпологаю что для программы автора ветки этого будет вполне достаточно 8)
Zeqfreed (2005-08-15 16:28:00) [15]Кефир87 © (15.08.05 12:25) [29]
Я тут вижу два более-менее приемлимых решения:
1. Хранить все в ини-файле, и там же хэш-значение пароля, потому что он не вызовет таких подозрений как кракозябры полученные в результате ксорения пароля.
2. Хранить все в бинарном файле, там же проксореный пароль.
Пантелеев Иван (15.08.05 16:00) [31]
> Да я скачивал
А в папку с проектом положил?
Пантелеев Иван (2005-08-15 16:00:00) [16]Да я скачивал, mb5.pas но, это ничего не изменило, всеравно вылазин ошибка.
evvcom (2005-08-15 12:50:00) [17]
> Да и потом можно задать минимальную длинну пароля. Например
> знаков 10...
Минимальное количество знаков никак не повлияет на сложность определения пароля, "скрытого" через xor (если только "взломщик", не будет подбирать его методом проб и ошибок, набирая его с клавиатуры :) )
Кефир87 (2005-08-15 12:25:00) [18]xor алгоритм в данном случае не так уж плох. Я просто не думаю что будут злые недображелатели которые яростно захотят взломать программу автора, а xor поможет скрыть пароль от любопытных глаз 8) Да и потом можно задать минимальную длинну пароля. Например знаков 10...
Zeqfreed (2005-08-15 11:14:00) [19]Пантелеев Иван (15.08.05 10:11) [27]
> Delphi пишет - что не возможно найти файл md5.dcu
Ммм, а ты скачал md5.pas и кинул его в папку проекта?
P.S.
Хеш, он же Хэш, он же Hash
Хэш-функция- ф-ция на входе получающая некоторые данные, и имеющая на выходе некоторое уникальное значение фиксированной длинны
Хэш-значение- значение возвращенное хэш-ф-цией
Пантелеев Иван (2005-08-15 10:11:00) [20]Я скачал примеры с http://www.fichtner.net/delphi/md5.delphi.phtmlно у меня не получается скомпилировать пример:
Delphi пишет - что не возможно найти файл md5.dcu
P.S. а что такое Хеш?