Нужна помощь.. Известна одна функция..но не всё известно. Code: const Hash='6004975948F15CC16C1297F60FA6A5F9'; var X:int64; function Key(s: string; sl: Integer): int64; var HashS, PassS: string; hash, Hash1, pass, key: int64; I: Integer; begin result := 0; if Length(s) <> 32 then exit; HashS := Copy(s, 17, 16); // 6C1297F60FA6A5F9 PassS := Copy(s, 1, 16); // 6004975948F15CC1 hash := StrToInt64('$' + HashS); // 7787453788757337593 pass := StrToInt64('$' + PassS); // 6918821337279585473 for I := 1 to sl do begin key := CorrectDesKey(I); // Не известно Hash1 := EncriptDes(pass, key); // Не известно if Hash1 = hash then begin result := key; break; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin X:= Key(Hash,10000000); Form1.Memo1.Lines.add(inttohex(x,8)); С этим Hash результат = 00624E50 т.е если правильно понял, 6442576 (это я 00624E50 перевёл в число,ведь результат это коллч.циклов) число циклов for I := 1 to sl do или нет? Собственно тут и вопрос.. Есть "первое" число.. 7787453788757337593 Есть "второе" число.. 6918821337279585473 Что нужно проделать со вторым за N количество циклов что бы оно стало равным первому? Сам Hash= конечно всегда разный и результат конечно тоже..
CorrectDesKey очевидно возвращает валидный ключ для шифрования DES'ом по индексу(у DES'а ключ 56 бит), а EncriptDes шифрует пароль этим самым ключом.