Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 10.12.2009, 09:26
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

а потом мы открываем файл paroli.txt и .. о чудо! тут же хранится пароли от программы!!

Что бы не было таких возгласов надо было захешить пароли а только потом писать их в файл
Ответить с цитированием
  #32  
Старый 10.12.2009, 10:11
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

То что ты решил проблему самостоятельно, молодец)

Хочу сразу предупредить, народ, не используйте метки в программе, это очень некрасивый стиль программирования, к тому же очень ненадежный.

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

Код:
var
  F:TextFile;
  l1, l2 :String;
begin
  AssignFile(F, 'paroli.txt');
  if FileExists('paroli.txt') then
    begin
    Reset(F);
    Readln(F, l1);
    if l1 <> '/1' then 
      begin
      Application.MessageBox('Нарушена целостность пароля','error');
      CloseFile(F);
      Exit;
      end
        else Readln(F, l1);
    Readln(F, l2);
    if l1 <> '/2' then 
      begin
      Application.MessageBox('Нарушена целостность пароля','error');
      CloseFile(F);
      Exit;
      end
        else Readln(F, l2);
    CloseFile(F);
    If (Edit1.Text='Администратор') and (Edit2.Text=l1) then 
      begin 
      end 
        else 
          If (Edit1.Text='Продавец') and (Edit2.Text=l2) then 
            begin 

            end;
    end
      else {файл не найден, делаем что-нибудь};
Ответить с цитированием
  #33  
Старый 11.12.2009, 15:23
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Цитата:
Сообщение от Asinkrit
То что ты решил проблему самостоятельно, молодец)

Хочу сразу предупредить, народ, не используйте метки в программе, это очень некрасивый стиль программирования, к тому же очень ненадежный.

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

Код:
var
  F:TextFile;
  l1, l2 :String;
begin
  AssignFile(F, 'paroli.txt');
  if FileExists('paroli.txt') then
    begin
    Reset(F);
    Readln(F, l1);
    if l1 <> '/1' then 
      begin
      Application.MessageBox('Нарушена целостность пароля','error');
      CloseFile(F);
      Exit;
      end
        else Readln(F, l1);
    Readln(F, l2);
    if l1 <> '/2' then 
      begin
      Application.MessageBox('Нарушена целостность пароля','error');
      CloseFile(F);
      Exit;
      end
        else Readln(F, l2);
    CloseFile(F);
    If (Edit1.Text='Администратор') and (Edit2.Text=l1) then 
      begin 
      end 
        else 
          If (Edit1.Text='Продавец') and (Edit2.Text=l2) then 
            begin 

            end;
    end
      else {файл не найден, делаем что-нибудь};
Скажи пожалуйста, в чем надежность в твоём случае? И еще, если есть возможность..можешь помочь в шифровании пороля любым методом применяемым к этому коду? Чтобы при изменении пороля, пороль шифровался и занасился в текстовый документ шифрованым!

Заранее спасибо!

P.S Показал этот способ профессору в университете! Вроде нормально, только надо еще сделать чтобы пороль шифровался! Завал полный =)
Ответить с цитированием
  #34  
Старый 11.12.2009, 16:11
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

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

Кстати, так как у тебя всего два пользователя, продавец и администратор, то лично я бы убрал Edit1, а вместо него поставил бы TComboBox, в котором прописал бы этих пользователей, пользователю не придется все время вводить Администратор или Продавец, при том, на текущий момент, если он напишет маленькими буквами продавец, то не сможе залогиниться, а для это я бы поставил проверку на регистр к примеру:
Код:
...
 If (AnsiUpperCase(Edit1.Text)='АДМИНИСТРАТОР') and (Edit2.Text=l1) then
...
А в случае с TComboBox, данной проверки вообще не нужно было бы:
Код:
    case ComboBox1.ItemIndex of
    0: if (Edit2.Text = l1) then begin end;
    1: if (Edit2.Text = l2) then begin end;
    end;
Поповоду кодирования пароля, создай две функции,
Код:
  function Code(const Str:String):String;
  function UnCode(const Str:String):String;
В коде их вызываешь,
Код:
    If (Edit1.Text='Администратор') and (Edit2.Text=UnCode(l1)) then 
      begin 
      end 
        else 
          If (Edit1.Text='Продавец') and (Edit2.Text=UnCode(l2)) then 
            begin 

            end;
Алгорит кодирования можешь взять любой, хоть сам придумай) К примеру, самый простой способ:
Код:
  function Code(const str:String):String;
  var
    b:byte;  
  begin
  result:=str;
  if Length(str)>0 then
    for b:=1 to Length(str) do
      Result[b]:=Chr(Ord(str[b])+(b mod 10));
  end;
и соответственно декодирование, тоже самое только со знаком минус)
Код:
  function UnCode(const str:String):String;
  var
    b:byte;  
  begin
  result:=str;
  if Length(str)>0 then
    for b:=1 to Length(str) do
      Result[b]:=Chr(Ord(str[b])-(b mod 10));
  end;
Ответить с цитированием
  #35  
Старый 12.12.2009, 12:02
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Асинкрит, огромное тебе спасибо за помощь! Только вот с кодированием не совсем разобрался, где его применять? На форме авторизации в var-е написать

function Code(const Str:String):String;
function UnCode(const Str:String):String;
На кнопку войти их вызываю?

Далее

На форме где изменяем пороль пишем
Код:
  function Code(const str:String):String;
  var
    b:byte;  
  begin
  result:=str;
  if Length(str)>0 then
    for b:=1 to Length(str) do
      Result[b]:=Chr(Ord(str[b])+(b mod 10));
  end;

Кстати, на Result ругается!

Далее декодирование используем на кнопку войти в авторизации?
Код:
 function UnCode(const str:String):String;
  var
    b:byte;  
  begin
  result:=str;
  if Length(str)>0 then
    for b:=1 to Length(str) do
      Result[b]:=Chr(Ord(str[b])-(b mod 10));
  end;
Admin: Теги и еще раз теги! При рецедиве последует бан.

Последний раз редактировалось Admin, 12.12.2009 в 13:58.
Ответить с цитированием
  #36  
Старый 12.12.2009, 12:18
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

function Code(const Str:String):String;
function UnCode(const Str:String):String;

Куда их писать? Вообщем, ничего не понимаю (((
Ответить с цитированием
  #37  
Старый 12.12.2009, 13:13
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Функция кодировки:

Код:
function Coding(Text : String):String;
var
  key, longkey: string;
  i: integer;
  toto : char;
begin
  longkey := '';
  key := 'ADSF';//Вместо такого ключа используй логин
  for i := 0 to (length(text) div length(key)) do
    longkey := longkey + key;
  for i := 1 to length(text) do
  begin
    toto := chr((ord(text[i]) xor ord(longkey[i]))); // XOR алгоритм
    result := result + toto;
  end;
end;


Запись в файл с кодированием:
Код:
var myFile:textfile;

AssignFile(myFile, 'Test.txt');
ReWrite(myFile);

WriteLn(myFile, Coding(login+':'+pass)); //login и pass это логин и пароль

CloseFile(myFile);

Чтение из файла и проверка:

Код:
AssignFile(myFile, 'Test.txt');

  Reset(myFile);

  while not Eof(myFile) do
  begin
    ReadLn(myFile, text);
    if text=Coding(login1+':'+pass1) then GOOD  //login1 и pass1 логин который ввел пользователь
                                    else BAD!!
  end;
  CloseFile(myFile);


Попробуй так!
Смысл в том что ты записываешь в файл зашифрованный пароль и логин, и сверяешь его тоже с зашив. значение которое ввел пользователь
Ответить с цитированием
  #38  
Старый 12.12.2009, 15:49
Йогурт Йогурт вне форума
Начинающий
 
Регистрация: 20.11.2009
Сообщения: 109
Репутация: 5
По умолчанию

Все! Разобрались уже со Страдальцем с этой проблемой =)
Ответить с цитированием
  #39  
Старый 12.12.2009, 19:08
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Читал, и просто поражался...

AssignFile(F, 'paroli.txt');
Лучше назвать так: Paroli-zawufrovannue-XORom.txt.

Даже в страшном сне не могу представить, чтобы кто-то использовал шифрование "хоr".
Если кому интересно, могу скинуть программу, которая автоматически за пару секунд ломает такой шифр.(ломаються любые пассы длиной до 23-х символов).

Не боитесь что этот Ваш Продавец окажеться шустрым малым, и получит пасс администратора. А далее скажем немного "подправит" цены или еще что-то себе на пользу.?

Вспомнилась фраза о "времени непуганных программистов начала 90-х".

П.с.: Asinkrit, спасибо тебе за ответы, сразу видно человека, который реально занимаеться коммерческими проектами.

Последний раз редактировалось Konrad, 12.12.2009 в 19:30.
Ответить с цитированием
Ответ



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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter