![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |