Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 275

Раздел: Delphi » Прочее
/ вопрос решён /

Как сделать чтобы программа запускалась по паролю. Чтобы пароль задавался в коде программы (програмка исключительно для себя)

Pokemonchyk Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Pokemonchyk (статус: Посетитель)
Вопрос отправлен: 20 января 2007, 22:08
Состояние вопроса: решён, ответов: 4.

Ответ #1. Отвечает эксперт: Сергей Устинов

Здравствуйте!

Самый простой вариант - в файл проекта перед строкой Application.CreateForm(TForm1, Form1); введите:
if InputBox('Внимание!','Введите пароль!','')<>'pass' then exit;

(не забудьте перед этим в Uses добавить модуль Dialogs).

Если же нужно будет пароль при вводе делать со звездочками - проще всего создать отдельную форму, которая будет грузиться первой. В нее Вы будете вводить пароль, если не правильный - закрываете приложение, если правильный - открываете нужную форму.

Удачи

Приложение:
  1. program Project1;
  2.  
  3. uses
  4. Forms, Dialogs,
  5. Unit1 in 'Unit1.pas' {Form1};
  6.  
  7. {$R *.res}
  8.  
  9. begin
  10. Application.Initialize;
  11.  
  12. then exit;
  13. Application.CreateForm(TForm1, Form1);
  14. Application.Run;
  15. end.


Ответ отправил: Сергей Устинов (статус: 2-ой класс)
Время отправки: 20 января 2007, 22:36
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, Pokemonchyk!

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

Если интересно, могу поделиться рабочим кодом.

Есть еще очень простой и удобный вариант - воспользоваться PE Password Encryptor от SMT - эта малюсенькая программка подобно протектору шифрует часть кода в точке входа и вставляет туда загрушку в виде диалога ввода пароля. Если пароль введен верно - программа нормально запускается.

См. прикреплённый файл.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 21 января 2007, 03:07
Оценка за ответ: 4

Ответ #3. Отвечает эксперт: Alex Van Glukhman

Добрый день!

Создаём отдельную форму для авторизации (см. код ниже)
При создании главной формы приложения на событие OnCreate пишем вызов формы авторизации

FPass:=TFPass.Create(Application);
try
if FPass.ShowModal=mrOk then ;
finally
FPass.Free;
FPass:=nil;
end;

Удачи

Приложение:
  1. unit uPass;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, DB;
  8.  
  9. type
  10. TFPass = class(TForm)
  11. LLogin: TLabel;
  12. LPass: TLabel;
  13. ELogin: TEdit;
  14. EPass: TEdit;
  15. BGo: TButton;
  16. BExit: TButton;
  17. procedure BGoClick(Sender: TObject);
  18. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  19. procedure ELoginChange(Sender: TObject);
  20. procedure BExitClick(Sender: TObject);
  21. private
  22. { Private declarations }
  23. public
  24. { Public declarations }
  25. end;
  26.  
  27. var
  28. FPass: TFPass;
  29. FlagClosed: Boolean = false;
  30. Attempt: Integer = 0;
  31.  
  32. implementation
  33.  
  34. {$R *.dfm}
  35.  
  36. procedure TFPass.BExitClick(Sender: TObject);
  37. begin
  38. Application.Terminate;
  39. end;
  40.  
  41. procedure TFPass.BGoClick(Sender: TObject);
  42. begin
  43. if (ELogin.Text='USER') AND
  44. (EPass.Text='PASSWORD') then
  45. begin
  46. FlagClosed:=true;
  47. ModalResult:=1;
  48. end
  49. else
  50. begin
  51. if Attempt=2 then
  52. begin
  53. ModalResult:=1;
  54. Exit;
  55. end;
  56. inc(Attempt);
  57.  
  58. ELogin.SetFocus;
  59. end;
  60. end;
  61.  
  62. procedure TFPass.ELoginChange(Sender: TObject);
  63. begin
  64. if (ELogin.Text<>'') AND (EPass.Text<>'') then BGo.Enabled:=true
  65. else BGo.Enabled:=false;
  66. end;
  67.  
  68. procedure TFPass.FormClose(Sender: TObject; var Action: TCloseAction);
  69. begin
  70. if not FlagClosed then Application.Terminate;
  71. end;
  72.  
  73. end.


Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 21 января 2007, 12:02
Оценка за ответ: 5

Комментарий к оценке: Здравствуйте! Большое спасибо за ответ. Все работает {с даного примера я также понял что все компоненты лучше называть своими именами, а не Edit1,Edit2,...а потом сидеть и голову ламать где что :)}
Если не трудно, то подскажите еще где надо покопаться чтобы звездочками показывало пароль (я думаю это как-то звязано с MaskEdit)
Я конешно могу и монитор выключать на если доведется ввести пароль при посторонних, но все же... :)

Ответ #4. Отвечает эксперт: min@y™

Чтоб пароль показывало звёздами - поставь свойство Edit.PasswordChar := '*';.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 22 января 2007, 08:20


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 22 января 2007, 17:08; участников в обсуждении: 4.
mvp

mvp (статус: 4-ый класс), 20 января 2007, 23:09 [#1]:

2 Сергей Устинов
мда - злая защита :) Читаем о хеш-функциях
P. S. Без обид, но такая защита - ф топку.
P. P. S. 2Pokemonchyk - если прога для себя, то зачем пароль?
P. P. P. S. Всё сказанное - ИМХО
Сергей Устинов

Сергей Устинов (статус: 2-ой класс), 20 января 2007, 23:19 [#2]:

2mvp Я не спорю, что это очень просто, но не буду же я вставлять, например, модуль для создания md5('pass') - человеку идея понятна, а нужна будет более сильная защита - будет копать в сторону шифрования, к тому же пользователь говорит, что программа для себя... (хотя зачем пароль тогда... от младшей сестры чтоли ... :) )
Pokemonchyk

Pokemonchyk (статус: Посетитель), 20 января 2007, 23:22 [#3]:

Программа как ра и содержит пароли универсальные мои.
При нажатии некоторых кнопок - пароль копируется в буфер, и я вставляю его где надо (12 символов).
Но если кто-то скопирует и вставит ето в текстовый файл- пароль налицо :)
Pokemonchyk

Pokemonchyk (статус: Посетитель), 21 января 2007, 00:02 [#4]:

Сергей Устинов, если можно вышлите мне на почту
файлы, которые использовались. Ибо чето у меня неладное из строкой №5
"Unit1 in 'Unit1.pas' {Form1};"
Сергей Устинов

Сергей Устинов (статус: 2-ой класс), 21 января 2007, 00:08 [#5]:

Создаете стандартный проект (Делфи 7)
Вместо внутренности проекта вставляете приложение (не вместо внутренности модуля, а вместо внутренности файла *.dpr проекта). И все. Больше изменений не было.
Pokemonchyk

Pokemonchyk (статус: Посетитель), 21 января 2007, 00:53 [#6]:

если чесно, никогда еще не открывал блокнотом *.dpr...

з.ы.
все работает. я довольный,пока-что с меня этого хватит. Спасибо!
Сергей Устинов

Сергей Устинов (статус: 2-ой класс), 21 января 2007, 00:59 [#7]:

его можно открывать не блокнотом, а, например нажав Ctrl+F12 (в делфях) и выбрав там Progect1.
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 21 января 2007, 19:38 [#8]:

У компонента TEdit есть свойство PasswordChar в данном случае PasswordChar:='*';
Pokemonchyk

Pokemonchyk (статус: Посетитель), 21 января 2007, 19:47 [#9]:

Спасибо!
И вообще, СПАСИБО ВСЕМ, кто уделил мне немного времени :D
mvp

mvp (статус: 4-ый класс), 22 января 2007, 17:08 [#10]:

2 Сергей устинов: извините, - погарячился - видно, что Pokemonchyk и этого достаточно.
Ещё раз примите мои извинения

31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:31
Выполнено за 0.03 сек.