Как работает данная функция? (Delphi)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by TopRus, 30 Aug 2013.

  1. TopRus

    TopRus New Member

    Joined:
    15 May 2011
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Нужна помощь..
    Известна одна функция..но не всё известно.

    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= конечно всегда разный и результат конечно тоже..
     
  2. Euler

    Euler New Member

    Joined:
    9 Sep 2012
    Messages:
    30
    Likes Received:
    0
    Reputations:
    0
    CorrectDesKey очевидно возвращает валидный ключ для шифрования DES'ом по индексу(у DES'а ключ 56 бит), а EncriptDes шифрует пароль этим самым ключом.