Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
1

Парольная аутентификация

01.10.2016, 15:36. Показов 2427. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, разрабатываю приложение с разграничением учетных пользователей. Не получается сменять пароли при входе учетной записи. Пароль меняется во 2 учетной записи, не знаю как это исправить.
Вот код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
unit WindowUnit;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, Menus;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    BitBtn1: TBitBtn;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    SmenaClick: TMenuItem;
    NewUserClick: TMenuItem;
    AllUsersClick: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure SmenaClickClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  type
TUser = record
name:string[20]; // ëîãèí
password:string[20];   // ïàðîëü
blocking:boolean;      // áëîêèðîâêà
password_rest:boolean;   // ïàðîëüíîå îãðàíè÷åíèå
end;
 
var
  Form1: TForm1;
   Users:array[1..50] of TUser;
  f:File of TUser;
  data:TUser;
    implementation
 
uses AuthorizationUnit, ChangePasswordUnit;
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
 
     begin
SmenaClick.Enabled:=false;
AllUsersClick.Enabled:=false;
NewUserClick.Enabled:=false;
AssignFile(f,'file.dat');
Rewrite(f);
Users[1].name := 'admin';
Users[1].password :='999';
 
Users[2].name := 'user';
Users[2].password :='888';
 
write(f,Users[1]);
write(f,Users[2]);
Closefile(f);
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form2.Show;
Form1.Hide;
end;
 
procedure TForm1.SmenaClickClick(Sender: TObject);
begin
Form3.Show;
Form1.Hide;
end;
 
end.
2-aя форма
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
unit AuthorizationUnit;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
 
type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form2: TForm2;
n:integer=3; // количество попыток
k:integer;
implementation
 
uses WindowUnit;
 
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
begin
 
AssignFile(f,'file.dat');
reset(f);
k:=1;
while(not eof(f)) do begin
 
read(f, Users[k]);
k:=k+1;
 
end;
 
CloseFile(f);
if (edit1.Text = Users[1].name) and (edit2.Text = Users[1].password) then
begin
ShowMessage('Пароль введен правильно!'+#13#10+' - Добро пожаловать:-Администратор');
Form1.NewUserClick.Enabled:=true;
Form1.AllUsersClick.Enabled:=true;
Form1.SmenaClick.Enabled:=true;
Form1.Show;
edit1.Clear;
edit2.Clear;
Form2.Hide;
end
else
 
if (edit1.Text = Users[k-1].name) and (edit2.Text = Users[k-1].password) then
begin
ShowMessage('Пароль введен правильно!'+#13#10+' - Добро пожаловать: Пользователь');
Form1.NewUserClick.Enabled:=false;
Form1.AllUsersClick.Enabled:=false;
Form1.SmenaClick.Enabled:=true;
Form1.Show;
edit1.Clear;
edit2.Clear;
Form2.Hide;
end
else
if (edit1.text='') then
begin
ShowMessage('Заполните требуемые поля');
end
else
begin
if (edit1.text<>Users[k].name) and (edit2.text<>Users[k].password) or (edit1.text = Users[k].name) or(edit2.Text = Users[k].password) then
begin
n:=n-1;
ShowMessage('Проверьте правильность введенных данных.Осталось '+inttostr(n) +' попытки');
edit1.Clear;
edit2.Clear;
if n<=0 then
begin
showmessage('Вы истратили все попытки. Программа закрывается');
form2.Close;
halt;
end ;
end;
end;
 
end;
 
end.
3-ая форма:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
unit ChangePasswordUnit;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
 
type
TForm3 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form3: TForm3;
k:integer;
j:integer;
implementation
 
uses WindowUnit;
 
{$R *.dfm}
 
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
assignFile(f,'file.dat');
reset(f);
k:=1;
while(not eof(f)) do begin
read(f,Users[k]);
k:=k+1;
end;
Closefile(f);
if (edit1.Text = Users[k-1].password) or (edit1.Text = Users[1].password) then
ShowMessage('Пароль верный')
else begin
ShowMessage('Пароль неверный!');
edit1.Clear;
end;
end;
 
procedure TForm3.BitBtn2Click(Sender: TObject);
begin
AssignFile(f,'file.dat');
reset(f);
k:=1;
while(not eof(f)) do begin
read(f,Users[k]);
k:=k+1;
 
end;
seek(f,filesize(f)-1);
 
Users[k-1].password:=edit2.Text;
write(f,Users[k-1]);
Closefile(f);
if (edit2.Text = edit3.Text) then
ShowMessage('Пароли совпадают!')
else begin
ShowMessage('Пароли не совпадают!');
edit2.clear;
edit3.Clear;
end; end;
 
 
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
Form3.Hide;
end;
 
end.
Вот сам проект файла с заданием формата pdf
Вложения
Тип файла: rar Лаб.работа по защите.rar (1.23 Мб, 34 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2016, 15:36
Ответы с готовыми решениями:

Лабораторная "Парольная аутентификация" - Delphi
Программа должна обеспечивать работу в двух режимах: администратора (пользователя с фиксированным...

Лабораторная "Парольная аутентификация"
Содержание задания Программа должна обеспечивать работу в двух режимах: администратора...

Аутентификация
Привет Хочу сделать формы с входом. Те есть будут 3 роли: админ, продавец, клиент. Для каждой из...

Аутентификация пользователя
Помогите с программой, как сделать не могу сообразить... В программе должны находится имена...

27
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
02.10.2016, 12:48  [ТС] 2
Да хоть подскажите, как исправить проблему и дописать ее, мучаюсь с программой очень много времени
0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
02.10.2016, 21:35 3
Delphi
1
 if (edit1.Text = Users[k-1].password) or (edit1.Text = Users[1].password) then
меняем на
Delphi
1
if edit1.Text = Users[1].password then
а точнее Users[1] должен соответствовать номеру текущего пользователя

к примеру вынести номер пользователя в глобальною переменною и при смене пароля проверять
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
02.10.2016, 21:45 4
1. У вас в проекте очень много предупреждений о присвоении строк с потерями. Это некрасиво и неверно.
2. Не думали в лабе по "защите" писать пароль не открытым текстом, а хотя-бы его MD5 hash?
0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
02.10.2016, 21:51 5
одинаковые глобальные переменные, вопрос зачем??
вы только себя запутываете
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
02.10.2016, 22:36 6
Набросал вам проект (как это на мой взгляд должно быть).
1. Не используются никакие глобальные переменные.
2. Для работы с "паролями" и авторизацией используется отдельный класс, который выполняет всю работу.
3. В примере форма с 2 кнопками. При создании формы создастся пользователь root/123. При нажатии на кнопку 1 root выполнит вход в "систему", при нажатии на кнопку 2 root-у будет сменен пароль.

Думаю, для примера - этого вам хватит с головой.
Вложения
Тип файла: zip Auth.zip (83.0 Кб, 37 просмотров)
1
142 / 40 / 14
Регистрация: 16.06.2016
Сообщений: 239
02.10.2016, 23:45 7
Цитата Сообщение от MyEternity Посмотреть сообщение
Не думали в лабе по "защите" писать пароль не открытым текстом, а хотя-бы его MD5 hash?
Цитата Сообщение от MyEternity Посмотреть сообщение
Набросал вам проект (как это на мой взгляд должно быть).
А почему тогда в этом проекте MD5 не использовал?
В Delphi это можно сделать с помощью TIdHashMessageDigest5 (это я ТС-у).

Кстати, пароли в открытом виде даже некоторые популярные программы и серверы хранят...
Вот ведь народ пошёл - совсем о "защите" не думает, а потом - дети последствия!
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
02.10.2016, 23:58 8
Цитата Сообщение от TimKruz Посмотреть сообщение
А почему тогда в этом проекте MD5 не использовал?
Пусть ТС сам реализует ) Может быть ему это как раз не нужно
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
03.10.2016, 15:44  [ТС] 9
Цитата Сообщение от TimKruz Посмотреть сообщение
Не думали в лабе по "защите" писать пароль не открытым текстом, а хотя-бы его MD5 hash?
Я вообще про MD5 первый раз слышу

Добавлено через 7 минут
MyEternity, Мне по заданию, еще надо добавлять пользователей и делать с помощью администратора ограничение на пароли пользователей и блокировку и еще смену пользователей. И как же всех пользователей с ихними паролями сохранять в типизированном файле?
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
03.10.2016, 15:50 10
Цитата Сообщение от vladis23 Посмотреть сообщение
И как же всех пользователей с ихними паролями сохранять в типизированном файле?
У вас в проекте как раз так и происходит. Уже. Вам просто добавить нужные реквизиты.
А пример я вам привел на TiniFiles т.к. оно удобнее в плане работы с таким вот списком.
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
03.10.2016, 16:51  [ТС] 11
MyEternity, отлично, а дальнейшие операции можно сделать. Например добавление новых уникальных пользователей, просмотр пользователей, парольное ограничение и блокировку?
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
03.10.2016, 17:34 12
Цитата Сообщение от vladis23 Посмотреть сообщение
добавление новых уникальных пользователей
В примере это уже есть.

Цитата Сообщение от vladis23 Посмотреть сообщение
просмотр пользователей
В моем примере вам нужно что-то вроде Ini.ReadSections (потом перебор и вывод Login).

Цитата Сообщение от vladis23 Посмотреть сообщение
парольное ограничение
Цитата Сообщение от vladis23 Посмотреть сообщение
блокировку
Что это означает, непонятно?

Добавлено через 11 минут
Цитата Сообщение от vladis23 Посмотреть сообщение
Я вообще про MD5 первый раз слышу
МD5 хорош тем, что вы будете хранить не сам пароль, а его Hash. И сравнивать уже не две строки, а именно 2 HASH - тот, что ввели и тот, что храните. Пароль подсмотреть нельзя, только подобрать перебором.
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
03.10.2016, 19:28  [ТС] 13
MyEternity, Вот сам файл задания что значит блокировка и парольное ограничение
Вложения
Тип файла: rar ЛР по защите_1 пароли.rar (968.5 Кб, 27 просмотров)
0
142 / 40 / 14
Регистрация: 16.06.2016
Сообщений: 239
03.10.2016, 20:28 14
Цитата Сообщение от vladis23 Посмотреть сообщение
Я вообще про MD5 первый раз слышу
https://ru.wikipedia.org/wiki/... 0%BC%D0%B0

Цитата Сообщение от vladis23 Посмотреть сообщение
И как же всех пользователей с ихними паролями сохранять в типизированном файле?
Очень просто. Нужно создать file of TUser и писать в него как Write(F, User).
Но учти, что в типизированном файле все записи должны быть одной длины.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  TUser = record
    Name, Password: String[20];
  end;
 
  TUsersControl = class
    User: array of TUser;
    UsersFileName: String;
    procedure Save;
    procedure Load;
  end;
 
var
  Form1: TForm1;
  UserControl: TUsersControl;
 
procedure TUsersControl.Load;
var
  F: file of TUser;
  i: Integer;
begin
  if FileExists(UsersFileName) then
  begin
    AssignFile(F, UsersFileName);
    Reset(F);
    SetLength(User, 0);
    while not Eof(F) do
    begin
      SetLength(User, Length(User) + 1);
      Read(F, User[Length(User) - 1]);
    end;
    CloseFile(F);
  end;
end;
 
procedure TUsersControl.Save;
var
  F: file of TUser;
  U: TUser;
begin
  AssignFile(F, UsersFileName);
  Rewrite(F);
  for U in User do
    Write(F, U);
  CloseFile(F);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  UserControl := TUsersControl.Create;
  UserControl.UsersFileName := 'users.dat';
  UserControl.Load;
end;
Ну это так, для примера.

Цитата Сообщение от MyEternity Посмотреть сообщение
Что это означает, непонятно?
"Парольное ограничение" - это чтоб в пароле обязательно были какие-то символы (цифры, например).
"Блокировка" - если не ошибаюсь, то просто возможность поставить "бан" учётной записи.
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
03.10.2016, 21:12  [ТС] 15
MyEternity, Это ваша программа,делфи не хватает чего то, я ее компилировать не могу
Миниатюры
Парольная аутентификация  
0
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
03.10.2016, 22:02 16
удалите строку выделенною красным
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
03.10.2016, 23:50  [ТС] 17
можете мне разобраться с этой программой, просто файлами не везет мне работать, всегда лажаю на них
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
04.10.2016, 14:29 18
У вас стоит четкая задача: писать в типизированный файл? Или формат файла - на ваше усмотрение?
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
04.10.2016, 14:43  [ТС] 19
MyEternity, в типизированный файл надо
0
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
04.10.2016, 15:01 20
Цитата Сообщение от vladis23 Посмотреть сообщение
MyEternity, в типизированный файл надо
Парольная аутентификация
0
04.10.2016, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2016, 15:01
Помогаю со студенческими работами здесь

Идентификация и аутентификация в делфи
Помогите с написанием программы! Идентификация и аутентификация пользователя на основе многоразовых...

Аутентификация через ONVIF
Нужна помошь с работой по Onvif . Надо сделать аутентификацию по примеру...

Базовая аутентификация по idhttp
Перерыл уже весь google нашел миллион примеров, как только не пробовал серавно не получается, мне...

Защита данных в информационных системах. Идентификация и аутентификация
1. Составить программу на любом языке программирования обеспечивающую ввод пароля с отображением...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru