![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранение паролей
Пантелеев Иван © (2005-08-13 00:10:00)Я знаю что можно хранить пароли к программе в ini файлах, реестре, но проблема в том что там их может посмотреть любой, есть ли более координальный способ хранения паролей?
Zeqfreed (2005-08-15 01:28:00) [21]Zeqfreed © (15.08.05 1:26) [25]
Ой-ё, извиняюсь за грамматику и опечатки, что-то я сегодня заработался :)
Zeqfreed (2005-08-15 01:26:00) [22]Пантелеев Иван (15.08.05 1:03) [24]
Суть хэширования в том, чтобы не сохранять данные (в твоем случае пароль) ни в открытов виде, ни в зашифрованном. Вместо этого данные обрабатываются специально хэш-ф-цией, которая для одних и тех же исходных данных возвращает одинаковое значение, причем:
1. подобрать различные исходные данные при обработке которых ф-ция вернет одинаковые значения практически невозможно
2. во возвращаемому значению невозможновосстоновить исходные данные
В твоем случае тебе лишь нужно узнать является ли введенный пользователем пароль верным. Для этого ты должен вызвать хэш-функцию (функцию которая обрабатывает данные) для того пароля который ввел пользователь и значение, которое эта же ф-ция вернула для правильного пароля, которое ты можешь хранить в любом месте в открытом виде. Так вот, если эти 2 значения совпадают, значит пользователь ввел правильный пароль.
Как уже было сказано, исходник хэш-функции и пример использования можно взять здесь:
http://www.fichtner.net/delphi/md5.delphi.phtml
P.S. Если что-то непонятно, то лучше спроси что, а не отказывайся от данного метода.
P.P.S. Кеш и Хэш абсолютно разные вещи )
Пантелеев Иван (2005-08-15 01:03:00) [23]vrem (13.08.05 20:46) [22]
Чего-то я там с кешем ничего не понял.
Может у кого ни быдь есть более лучший пример или ну не знаю ...
bva (2005-08-13 21:10:00) [24]Кодируй пароль
function EnDeCrypt(const text:String):String;
var i:integer;
begin
Result:=text;
for i:=1 to Length(text) do
Result[i]:=chr(not(ord(text[i])));
end;
vrem (2005-08-13 20:46:00) [25]Исходник Md5 и исходник програмы для тестирования исходника MD5
http://www.fichtner.net/delphi/md5.delphi.phtml
всё вместе килобайт 20
vrem (2005-08-13 20:03:00) [26]Пантелеев Иван
Пользователь вводит пароль "корова", ваша программа получает это слово "корова" и обрабатывает некой функцией.
Function('корова')
Функция обрабатывает слово "корова", и выдаёт результат, например его хеш - что то вроде "abcd3452f67sdf" - именно этот результат Вы записываете в файл *.ini.
В следующий раз пользователь вводит пароль, программа опять обрабатывает пароль этой функцией, получает результат и сравнивает со считанным из ini файла. если совпадает - пользователь получает доступ.
Так делать удобнее, т.к. при пароле "корова" хеш его "abcd3452f67sdf" не позволит пользователю получить доступ - ведь программа обработает его и получит другое значение хеша. Поэтому прятать хеш не нужно - он фактически ничего не даёт злоумышленнику - как пароль не действует и получить из него реальный пароль "корова" так же не получится.
Удобно и быстро рассчитывать хеш используя алгоритм MD5 - там есть функция "Рассчитать хеш строки"
Пантелеев Иван (2005-08-13 19:42:00) [27]Если можно - объясните как это сделать?
Пантелеев Иван (2005-08-13 19:41:00) [28]Нет, я думаю, что кеш для меня сейчас это ещё рано. По этому я хочу чтобы пароли к программе хранились в БД.
Anatoly Podgoretsky (2005-08-13 15:41:00) [29]Хватает хранение хешей
Пантелеев Иван (2005-08-13 14:52:00) [30]Тоесть?
Anatoly Podgoretsky (2005-08-13 13:23:00) [31]Пантелеев Иван (13.08.05 13:11) [14]
Ну и зачем для этого хранить пароль?
Пантелеев Иван (2005-08-13 13:14:00) [32]DrPass © (13.08.05 01:37) [9]
А можно ссылку на Lockbox
Пантелеев Иван (2005-08-13 13:11:00) [33]Моя программа дожна открываться по вводу пароля который будет, у каждого созданного в программе пользователя. На данный момент эти пароли и имена пользователей хранятся в ini-файле. Но это не безопастно. Именно по этому мне нужны какие-то более кардинальные методы для хранения паролей и имён пользователей к программе.
KilkennyCat (2005-08-13 01:41:00) [34]Удалено модератором
Alexander Panov (2005-08-13 01:40:00) [35]Ты скажи, для чего тебе хранить пароль?
Пантелеев Иван (2005-08-13 01:38:00) [36]А кто ни будь может мне подробно рассказать как создать маленькую БД для хранения там паролей, и как их от туда считать?
Совет (2005-08-13 01:38:00) [37]
> Кефир87 © (13.08.05 01:21) [8]
Если юзер задаст пароль коротким, то подобрать будет эллементарно.
DrPass (2005-08-13 01:37:00) [38]
> Кещ - насколько я знаю большинство программ умеют расшифровывать
Не "кещ" (это кеш или клещ подразумевался?), а хеш. Он не расшифровывается. Вернее, не расшифровывается, если алгоритм несимметричный. В этом случае пароль можно подобрать только перебором. Ну а возможность такого подбора за приемлемое время напрямую зависит от длины и сложности самого пароля, а также от длины ключа шифрования.
> Кефир87 © (13.08.05 01:21) [8]
Xor-шифрование. Хорошо. Это самый простой алгоритм. Но он, к сожалению, симметричный. Легко взламывается и без перебора.
> Пантелеев Иван (13.08.05 00:50) [6]
Есть замечательный и при этом бесплатный набор компонентов Lockbox, он включает также и замечательную документацию по криптографии, самим компонентам и их применению, в том числе и для хеширования паролей. Правда, на английском языке.
Кефир87 (2005-08-13 01:21:00) [39]
function Crypt(s:string):string;
begin
Result := s;
for i := 0 to length(Result)-1 do
if odd(i) then Result[i] := Result[i] xor 5 else Result[i] := Result[i] xor 2;
end;
...
AssignFile(f, "password.txt");
Reset(f);
Readln(f, s);
s := Crypt(s);
CloseFile(f);
...
AssignFile(f, "password.txt");
Rewrite(f);
Writeln(Crypt(s));
CloseFile(f);
...
KilkennyCat (2005-08-13 01:04:00) [40]
> Кто-то мне говорил, что пароли можно хранить в базе данных
>
ничем не отличается от хранения в реестре, инишках и т.д. с точки зрения доступа. Создавать же БД ради пароля... это только если паролей куча :))