![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пароли и *.ini [D7, XP]
FBI Agent © (2006-03-31 21:30:00)У меня в программе есть большая дырка, которую хотелось бы закрыть - это то, что пароль сохраняется в ини-файле в открытом виде, без всякого рода шифрования. Как сделать что-бы он шифровался и при проверке программа смогла его дешифровать?
tesseract (2006-04-01 19:26:00) [1]
> Может и большинство программ пароли не хранят, что бы не
> было возможности его украсть.
Они использую эмпирически-предсказательный блок "e-Шамбала (rev /dev/random)" для определения имеет ли пользователь доступ к программе или нет.
см [3]
Anatoly Podgoretsky (2006-04-01 17:35:00) [2]Может и большинство программ пароли не хранят, что бы не было возможности его украсть.
FBI Agent (2006-04-01 17:09:00) [3]А что программа может воспринимать пароль установленный пользователем, без его сохранения?
Anatoly Podgoretsky (2006-04-01 15:20:00) [4]А зачем у тебя вообще пароли хранятся?
FBI Agent (2006-04-01 14:09:00) [5]Дело в том, что XOR легко ломается, а вот с MD5 мне идея понравилась?
Никто не делал подобного?
Рамиль (2006-03-31 21:43:00) [6]md5
tesseract (2006-03-31 21:43:00) [7]самый лёгкий - XOR(нужной длины).
посложнее и надёжнее - например MD5.
Хранишь не пароль а его хэш. при вводе пароля создаёшь по нему хэш и сравниваешь с хранимым. Один из самых нормальных методов. Т.к пароль не храниться в чистом виде.
Rial (2006-03-31 21:41:00) [8]Проще всего для начала зашихровать пароль с помощью операции XOR с использованием достаточно длинной строки и переменной точкой входа.
procedure XorData(Const Data:Pointer;Const DataSize:Integer;Const XorString:String);
Var ptData:ptVoidArray;
I,J,SL,SN,N:Integer;
begin
SL:=Length(XorString);
If (SL<=0)then Exit;
ptData:=Data;
SN:=DataSize div SL;
For I:=0 to SN-1 do
For J:=0 to SL-1 do begin
N:=I*SL+J;
ptData^[N]:=ptData^[N] xor Ord(XorString[J+1]);
end;
SN:=DataSize mod SL;
For I:=1 to SN do begin
N:=DataSize-SN+I-1;
ptData^[N]:=ptData^[N] xor Ord(XorString[I]);
end;
end;
При чтении выполняешь повторно вызов процедуры - и все тип топ.
A xor B xor B=A.