Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2018, 01:05   #11
rustorkan
Пользователь
 
Регистрация: 07.06.2017
Сообщений: 53
По умолчанию

Возникает ошибка: "Access Violation".
Вложения
Тип файла: rar Смена пароля.rar (179.1 Кб, 11 просмотров)
rustorkan вне форума Ответить с цитированием
Старый 03.02.2018, 02:41   #12
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Эх. Где мои 35 лет! В те годы я тоже решил хранить пароли в программе в зашифрованном виде. Теперь я понимаю, какой я был дурак-троешник!
northener вне форума Ответить с цитированием
Старый 04.02.2018, 21:15   #13
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Эх. Где мои 35 лет! В те годы я тоже решил хранить пароли в программе в зашифрованном виде. Теперь я понимаю, какой я был дурак-троешник!
Все же от задачи зависит, иногда скрыть пароль от глазиков бешаных юзеров в 1 локальной сети бывает достаточно, чем упоротся там, где собственно радовать будет САМ факт что упоролся))))
Пишу много и развернуто
Heneken87 вне форума Ответить с цитированием
Старый 05.02.2018, 01:41   #14
rustorkan
Пользователь
 
Регистрация: 07.06.2017
Сообщений: 53
По умолчанию

Написал.
Как поступить, если файл с паролем отсутствует?
Вложения
Тип файла: rar Смена пароля.rar (179.8 Кб, 14 просмотров)
rustorkan вне форума Ответить с цитированием
Старый 05.02.2018, 18:54   #15
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от rustorkan Посмотреть сообщение
Написал.
Как поступить, если файл с паролем отсутствует?
Если не затруднит, вышлите не весь проект, а кусок кода метода где собственно чтение и происходит.

З.Ы. Если с INI чтение, то if "Ini".ReadString('T','A','&&&&' ) = '&&&&' then
raise Exception.Create('Азазазазаза, не угадал!');
Если с файла то:
if FileExists('C:/PasswordFile.ogogo') = False then
raise Exception.Create('Азазазазаза, не угадал!');
Если с памяти как текст то:
if StringStream.DataString = '' then
raise Exception.Create('Азазазазаза, не угадал!');

Искренне признаюсь качать весь проект ЛЕНЬ! Да и мало -ли, что там в проекте
Пишу много и развернуто

Последний раз редактировалось Heneken87; 05.02.2018 в 19:08.
Heneken87 вне форума Ответить с цитированием
Старый 05.02.2018, 22:43   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Искренне признаюсь качать весь проект ЛЕНЬ! Да и мало -ли, что там в проекте
179 Кбайт проблема скачать?!!!!!

да только сама страница с форума весит больше 100 Кб.

ну да ладно, боитесь текстовых файлов, ноу проблем, держите

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
кусок кода метода где собственно чтение и происходит.
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
IniFile : TIniFile;
old, temp : string;

begin
If ComboBox1.ItemIndex=-1 then
ShowMessage('Выберите пользователя!') else

    begin
    If Edit1.Text='' then
    ShowMessage('Введите старый пароль!') else
    If Edit2.Text='' then
    ShowMessage('Введите новый пароль!') else
    If Edit3.Text='' then
    ShowMessage('Введите второй раз новый пароль!') else
    If Edit2.Text <> Edit3.Text then
    ShowMessage('Новые пароли не совпадают!') else
    If Edit1.Text=Edit2.Text then
    ShowMessage('Старый и новый пароли не должны совпадать!') else

        If ComboBox1.Text='Администратор' then
          begin
          If FileExists(ExtractFilePath(Application.ExeName)+'config.ini') then
          begin
          IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini');
          temp:=IniFile.ReadString('ADMIN', 'pass', '');
          old:=StringCoder(BytesToString(temp));

          If Edit1.Text=old then
              begin
              ShowMessage('Пароль успешно изменен!');
              IniFile.WriteString('ADMIN', 'pass',  StringToBytes(StringCoder(Edit2.text)));
              IniFile.Free;
              end;

                If Edit1.Text <> old then
                    begin
                    ShowMessage('Неверный старый пароль!');
                    end;
          end else ShowMessage('Обратитесь к системному админу!');
          end else

          If ComboBox1.Text='Пользователь' then
            begin
            If FileExists(ExtractFilePath(Application.ExeName)+'config.ini') then
            begin
            IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini');
            temp:=IniFile.ReadString('USER', 'pass', '');
            old:=StringCoder(BytesToString(temp));

            If Edit1.Text=old then
                begin
                ShowMessage('Пароль успешно изменен!');
                IniFile.WriteString('USER', 'pass',  StringToBytes(StringCoder(Edit2.text)));
                IniFile.Free;
                end;

                  If Edit1.Text <> old then
                      begin
                      ShowMessage('Неверный старый пароль!');
                      end;
            end else ShowMessage('Обратитесь к системному админу!');
          end;
    end;
end;

Цитата:
Сообщение от rustorkan Посмотреть сообщение
Как поступить, если файл с паролем отсутствует?
Зависит от задачи (от поставленного ТЗ), от Вас.
Варианты.
- Сообщать, что нет необходимого файла и вываливаться (нечего менять, если файла нет)
- Создавать новый файл с паролями (только это огромная дырища - ведь достаточно удалить старый INI, чтобы получить новый с нужными паролями)
- другое....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.02.2018, 15:46   #17
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

- Другое: Ввести понятие системного пароля хранящегося в исходном коде. При отсутсвии файла конфига спрашивать этот пароль и создавать файл в случаи успеха.
Ну наверное как то так:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  IniFile : TIniFile;
  old, temp : string;
  UserGroup: string;
  ErrorStr: string;
begin
   try
    ErrorStr := '';
    case ComboBox1.Items.IndexOf(ComboBox1.Text) of
      0:
        UserGroup := 'ADMIN';
      1:
        UserGroup := 'USER';
    end;
    if ComboBox1.Items.IndexOf(ComboBox1.Text) < 0 then
    ErrorStr := ErrorStr + ' - Выберите пользователя!' + #13#10;
    If Edit1.Text = '' then
    ErrorStr := ErrorStr + ' - Введите старый пароль!' + #13#10;
    If Edit2.Text = '' then
    ErrorStr := ErrorStr + ' - Введите новый пароль!' + #13#10;
    If Edit3.Text = '' then
    ErrorStr := ErrorStr + ' - Введите второй раз новый пароль!' + #13#10;
    if ErrorStr = '' then
    begin
      If Edit2.Text <> Edit3.Text then
      ErrorStr := ErrorStr +  ' - Новые пароли не совпадают!';
      If Edit1.Text = Edit2.Text then
      ErrorStr := ErrorStr +  ' - Старый и новый пароли не должны совпадать!';
    end;
    If FileExists(ExtractFilePath(Application.ExeName) + 'config.ini') = False then
    begin
      if Application.MessageBox('Завести файл паролей. Продолжить?',
      'Уведомление', MB_YESNO + MB_ICONWARNING) = IDYES then
      begin
        if Edit2.Text <> '123123123123' then // Можно обернуть в до окно для ввода
        begin
          ErrorStr := 'Пароль администратора не совпадает, добавление файла отклонено';
          Exit;
        end;
        IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
        IniFile.WriteString(UserGroup, 'pass',  StringToBytes(StringCoder(Edit2.text)));
        ErrorStr := 'Пароль успешно добавлен!';
        Exit;
      end
        else ErrorStr := ' - Обратитесь к системному админу!';
    end;
    if ErrorStr <> '' then
    Exit;
    IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
    temp := IniFile.ReadString(UserGroup, 'pass', '&&!&&!-[]');
    if temp = '&&!&&!-[]' then
    begin
      ErrorStr := 'Пользователь ' + UserGroup + ' не найден в системе!';
      Exit;
    end;
    old := StringCoder(BytesToString(temp));
    If Edit1.Text = old then
    begin
      IniFile.WriteString(UserGroup, 'pass',  StringToBytes(StringCoder(Edit2.text)));
      IniFile.Free;
      ErrorStr := 'Пароль успешно изменен!';
    end
    else ErrorStr := 'Неверный старый пароль!';
  finally
    if ErrorStr <> '' then
    ShowMessage(ErrorStr);
  end;
end;
Пишу много и развернуто

Последний раз редактировалось Heneken87; 07.02.2018 в 16:05.
Heneken87 вне форума Ответить с цитированием
Старый 16.02.2018, 14:29   #18
rustorkan
Пользователь
 
Регистрация: 07.06.2017
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Heneken87 Посмотреть сообщение
Ввести понятие системного пароля, хранящегося в исходном коде. При отсутствии файла конфига спрашивать этот пароль и создавать файл в случае успеха.
Это небезопасно.
rustorkan вне форума Ответить с цитированием
Старый 16.02.2018, 14:31   #19
rustorkan
Пользователь
 
Регистрация: 07.06.2017
Сообщений: 53
По умолчанию

Конечный вариант.
Вложения
Тип файла: rar Смена пароля.rar (179.7 Кб, 13 просмотров)
rustorkan вне форума Ответить с цитированием
Старый 16.02.2018, 14:34   #20
rustorkan
Пользователь
 
Регистрация: 07.06.2017
Сообщений: 53
По умолчанию

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  IniFile : TIniFile;
  old, temp : string;
  UserGroup : string;
  ErrorStr : string;
begin
   try
    ErrorStr := '';
    case ComboBox1.Items.IndexOf(ComboBox1.Text) of
      0:
        UserGroup := 'ADMIN';
      1:
        UserGroup := 'USER';
    end;
    If ComboBox1.Items.IndexOf(ComboBox1.Text) < 0 then
    ErrorStr := ErrorStr + ' - Выберите пользователя!' + #13#10;
    If Edit1.Text = '' then
    ErrorStr := ErrorStr + ' - Введите старый пароль!' + #13#10;
    If Edit2.Text = '' then
    ErrorStr := ErrorStr + ' - Введите новый пароль!' + #13#10;
    If Edit3.Text = '' then
    ErrorStr := ErrorStr + ' - Введите второй раз новый пароль!' + #13#10;
    If ErrorStr = '' then
    begin
      If Edit2.Text <> Edit3.Text then
      ErrorStr := ErrorStr +  ' - Новые пароли не совпадают!' + #13#10;
      If Edit1.Text = Edit2.Text then
      ErrorStr := ErrorStr +  ' - Старый и новый пароли не должны совпадать!' + #13#10;
    end;
    If FileExists(ExtractFilePath(Application.ExeName) + 'config.ini') = False then
    begin
        ErrorStr := ' - Обратитесь к системному администратору!';
    end;
    If ErrorStr <> '' then
    Exit;
    IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'config.ini');
    temp := IniFile.ReadString(UserGroup, 'pass', '');
    old := StringCoder(BytesToString(temp));
    If Edit1.Text = old then
    begin
      IniFile.WriteString(UserGroup, 'pass',  StringToBytes(StringCoder(Edit2.text)));
      IniFile.Free;
      ErrorStr := 'Пароль успешно изменен!';
    end
    else ErrorStr := 'Неверный старый пароль!';
  finally
    If ErrorStr <> '' then
    ShowMessage(ErrorStr);
  end;
end;
rustorkan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена пароля Diana528 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 3 06.02.2014 10:36
Программная смена пароля SYSDBA artemavd БД в Delphi 1 27.09.2012 18:45
Смена пароля на сайте Weresk Работа с сетью в Delphi 6 31.01.2012 17:42
Смена пароля средствами SMS arturkhusnull Безопасность, Шифрование 2 15.08.2011 12:49
Смена пароля Magda Помощь студентам 3 02.06.2010 20:03