|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#31
|
||||
|
||||
а потом мы открываем файл paroli.txt и .. о чудо! тут же хранится пароли от программы!!
Что бы не было таких возгласов надо было захешить пароли а только потом писать их в файл |
#32
|
|||
|
|||
То что ты решил проблему самостоятельно, молодец)
Хочу сразу предупредить, народ, не используйте метки в программе, это очень некрасивый стиль программирования, к тому же очень ненадежный. Тоже самое, что и у тебя, только в разы понадежнее будет, в твоем случае, если файла не существует, то ты получишь ряд ошибок, в моем случае, на это есть проверка, плюс ко всему, никаких меток. Код:
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
|
|||
|
|||
Цитата:
Заранее спасибо! P.S Показал этот способ профессору в университете! Вроде нормально, только надо еще сделать чтобы пороль шифровался! Завал полный =) |
#34
|
|||
|
|||
В данном случае, надежность - отработка кодом всех возможных ситуаций, хотя этот код можно еще неплохо оптимизировать.
Кстати, так как у тебя всего два пользователя, продавец и администратор, то лично я бы убрал Edit1, а вместо него поставил бы TComboBox, в котором прописал бы этих пользователей, пользователю не придется все время вводить Администратор или Продавец, при том, на текущий момент, если он напишет маленькими буквами продавец, то не сможе залогиниться, а для это я бы поставил проверку на регистр к примеру: Код:
... If (AnsiUpperCase(Edit1.Text)='АДМИНИСТРАТОР') and (Edit2.Text=l1) then ... Код:
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
|
|||
|
|||
Асинкрит, огромное тебе спасибо за помощь! Только вот с кодированием не совсем разобрался, где его применять? На форме авторизации в 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, 12.12.2009 в 13:58. |
#36
|
|||
|
|||
function Code(const Str:String):String;
function UnCode(const Str:String):String; Куда их писать? Вообщем, ничего не понимаю ((( |
#37
|
||||
|
||||
Функция кодировки:
Код:
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
|
|||
|
|||
Все! Разобрались уже со Страдальцем с этой проблемой =)
|
#39
|
||||
|
||||
Читал, и просто поражался...
AssignFile(F, 'paroli.txt'); Лучше назвать так: Paroli-zawufrovannue-XORom.txt. Даже в страшном сне не могу представить, чтобы кто-то использовал шифрование "хоr". Если кому интересно, могу скинуть программу, которая автоматически за пару секунд ломает такой шифр.(ломаються любые пассы длиной до 23-х символов). Не боитесь что этот Ваш Продавец окажеться шустрым малым, и получит пасс администратора. А далее скажем немного "подправит" цены или еще что-то себе на пользу.? Вспомнилась фраза о "времени непуганных программистов начала 90-х". П.с.: Asinkrit, спасибо тебе за ответы, сразу видно человека, который реально занимаеться коммерческими проектами. Последний раз редактировалось Konrad, 12.12.2009 в 19:30. |