![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ctrl+Del в DBGrid [D6, Win2k]
Teuton © (2005-03-10 13:10:00)Здравствуйте.
Известно, что в DBGrid встроено сочетание клавишь Ctr+Del, которое удаляет запись. Помогите пожалуйста советом, как запретить пользователю удалять запись таким образом, как заблокировать это?
Заранее благодарю!
Anatoly Podgoretsky (2005-03-11 12:11:00) [1]Teuton © (11.03.05 09:48) [22]
Сверяй с сигнатурой, один из вариантов этого термина ХЕШ.
Для данного случая я бы порекомендовал CRC32 или CRC16, поскольку тогда легко хранить где угодно, в базе, в реестре, в ини и т.д.
Bronco (2005-03-11 10:58:00) [2]
> Teuton © (11.03.05 10:50) [25]
> не могли бы вы мне пояснить как это делать
Ну, если упрощенно, то примерно так:
Есть некая функция, вычисляющая хэш-сумму от твоей строки с паролем. Пример функции приведен в [19] ссылке. Вычисляешь эту хэш-сумму и записываешь в таблицу БД.
Затем, когда юзер вводит пароль, чтобы зайти в программу, твоя программа предварительно вычисляет хэш от введенного пароля и сравнивает с тем значением, которое уже хранится в базе. Если совпало, значит пускаем в программу
Teuton (2005-03-11 10:50:00) [3]>>Bronco
Да кажется, я вас понял ;) Уж простите за навязчивость, но не могли бы вы мне пояснить как это делать?
Заранее благодарю!
Bronco (2005-03-11 10:33:00) [4]извиняюсь
> Хэш, в отличие от пароля,
читать как
Хеш, в отличие от зашифрованного пароля
Bronco (2005-03-11 10:32:00) [5]
> Teuton © (11.03.05 08:53) [20]
> А что если вписывать в таблицу зашифрованный пароль? То
> есть значение в таблицу будет записано функцией типа crypt()
>
Об этом тебе и говорят. Только лучше не пароль, а его хэш (что-то вроде контрольной суммы). Хэш, в отличие от пароля, расшифровать невозможно.
Teuton (2005-03-11 09:48:00) [6]>>Anatoly Podgoretsky
Как же его не хранить? А с чем сверять введенный пароль? ;)
Anatoly Podgoretsky (2005-03-11 09:07:00) [7]Не храни пароль совсем.
Teuton (2005-03-11 08:53:00) [8]>>stakan Vlad
Спасибо вам большое за советы, друзья, но слишком хорошего мнения о моих познаниях в программировании...
Что такое MD5, XOR и как работать с байтами я вообще не знаю :( А Слово хэш лишь напоминает мне о моиг потугах работать с массивом в перле и не более того :(
Может быть что-нибудь попроще? Да, я понимаю, что DBF-файл уязвим и может быть спокойно даже в нортоне просмотрен. А что если вписывать в таблицу зашифрованный пароль? То есть значение в таблицу будет записано функцией типа crypt() как в перле? Есть ли такая функция в Дельфи?
Спасибо еще раз.
Vlad (2005-03-10 17:32:00) [9]
> Teuton © (10.03.05 17:05) [16]
Если работаешь с базой, то пароль резоннее хранить в таблице.
Правда такая защита рассчитана на полного ламера, поскольку файл DBF сам по себе можно открыть хоть Excel'ем, смотреть, изменять данные и делать с ними все что угодно.
Хранить пароль лучше в виде хеш-суммы (напр. MD5)
вот пример исходников вычисления MD5 на Delphi
http://delphibase.spb.ru/?action=viewfunc&topic=mathcode&id=10243
При этом, в программе старайся избегать проверки пароля типа:
if CheckPassword(...) then
взламывается за 5 минут.
Придумай что нибудь посложнее.
stakan (2005-03-10 17:18:00) [10]>>Teuton
Есть простейший способ шифрования, но любопытного юзера остановит. Разбиваешь пароль на символы (байты), делаешь каждому символу XOR с какой нибудь битовой маской (любым символом), на выходе получаешь левый символ. Расшифровка - так же: берёшь символ, XOR с той же маской, с какой шифровал - получаешь исходный символ.
markers (2005-03-10 17:06:00) [11]А DBF у нас что, не база?
Teuton (2005-03-10 17:05:00) [12]>>stakan
У меня простое приложение учета товаров, работающее локально с DBF-файлом.
markers (2005-03-10 17:05:00) [13]То Teuton
Короче пиши в приват либо на ящик в инфо либо
admin(ЗаСпАм)@sibdisnet.ru
Естественно (ЗаСпам) убери когда писать будешь...
markers (2005-03-10 17:02:00) [14]ту Стакан
Чё-то я там не замечал?
Да и есть хорошая библиотечка (Фришная) которая может и в MD5 и BlowFish и еже сним...
stakan (2005-03-10 16:59:00) [15]>> Teuton
Вариантов много, смотря какое приложение.
Если работа с БД то пароли можно хранить в самой БД (создавать пользователя базы с паролем, тогда шифрованием займётся СУБД) или завести отдельную таблицу в базе для хранения пользователей с паролями. Насчёт алгоритмов шифрования, то тут я не спец. Если приложение обычное, то можно в реестре, опять же шифруя пароль. Насколько я помню есть компоненты (из RXLib) которые пишут в реестр уже в зашифрованом виде. И т.д.
markers (2005-03-10 16:54:00) [16]Шифровать писать свою систему щифрования либа юзать компоненты. И ещё Разные типы шифрования существуют... Если хочешь подробнее пиши в приват..
Teuton (2005-03-10 16:44:00) [17]>>stakan
Спасибо вам большое! Пользуясь случаем, хочу спросить вас, каков принцип сохранения паролей (с возможностью програмного изменения пароля) в Дельфи, но так, чтобы сохранять пароль не в текстовом файле, доступном всем, а в каком-нибудь зашифрованном файле?
Заранее благодарю!
stakan (2005-03-10 16:15:00) [18]Можно так
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_DELETE) then
begin
ShowMessage('Нельзя!!!');
Abort
end;
end;
Teuton (2005-03-10 16:11:00) [19]>>markers
Нет это не помогает :(
markers (2005-03-10 15:56:00) [20]А Read-Only не пробовал?