помогите Пересести с Си на Делфи простую функцию

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Linuxo, 19 Nov 2008.

  1. Linuxo

    Linuxo New Member

    Joined:
    19 Nov 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    добрый день!
    я учусь программировать на делфи, но совсем не знаю синтаксиса Си...

    нужен перевод этого кода на паскальный (или хотябы расписать по пунктам что тут делается)


    #define AIM_MD5_STRING "AOL Instant Messenger (SM)"

    /* calculate md5-hash to send to server */
    md5_init(&state);
    md5_append(&state, (const md5_byte_t *)authkey, strlen(authkey));
    md5_append(&state, (const md5_byte_t *)passwd, strlen(passwd));
    md5_append(&state, (const md5_byte_t *)AIM_MD5_STRING, strlen(AIM_MD5_STRING));
    md5_finish(&state, (md5_byte_t *)auth_hash);

    /* Now we ready send to server auth_hash array (16 bytes long) */

    этот код подготавливает md5 хеш пароля для безопасного логина в icq


    AOL Instant Messenger (SM) - необходимая константа
    authkey - случайная строка, которая дается сервером

    обе эти вещи учавствуют в хешировании пароля.

    Спасибо.
     
  2. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Это всеголишь заголовочный файл типа *.h в котором описаны константы и функции. Сами функции поищи в файле с такимще названием но расширением или .c или .cpp
     
  3. sw_max

    sw_max New Member

    Joined:
    8 Jul 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    да нет... тут идет вызов только стандартных функций МД5 крипта, все остальное - нужная последовательность действий...

    вот делфовый код из исходников крысы...
    но не понятно все-же...
    например что такое
    MD5Digest : TMD5Digest;
    MD5Context : TMD5Context;
    и откуда оно берется





    procedure TicqSession.parseAuthKey(snac:string);
    var
    I : Integer;
    MD5Digest : TMD5Digest;
    MD5Context : TMD5Context;
    key : String;
    sendKey : String;
    begin
    i := 1;
    key := getWNTS(snac, i);
    FillChar(MD5Digest, sizeOf(TMD5Digest), 0);
    // for I := 0 to 15 do
    // Byte(MD5Digest) := 0;
    MD5Init(MD5Context);
    MD5UpdateBuffer(MD5Context, PChar(key), length(key));
    MD5UpdateBuffer(MD5Context, PChar(pwd), length(pwd));
    MD5UpdateBuffer(MD5Context, PChar(AIM_MD5_STRING), length(AIM_MD5_STRING));
    MD5Final(MD5Digest, MD5Context);
    sendKey := '';
    for I := 0 to 15 do
    sendKey := sendKey + MD5Digest;
    // sendFLAP( LOGIN_CHANNEL, #0#0#0#1
    if saveMD5Pwd then
    key := TLV($4C, '')
    else
    key := '';

    sendSNAC( $17, $02,
    TLV(1, myinfo.uinAsStr)
    +TLV($25, sendKey)
    // By Rapid D
    +TLV(3, 'ICQ Inc. - Product of ICQ (TM).2003b.5.56.1.3916.85')
    +TLV($16, word($010A))
    +TLV($17, word($0002))
    +TLV($18, word($0038))
    +TLV($19, word($0001))
    +TLV($1A, word($0f4c))
    +TLV($14, integer($55))
    +TLV($E,'us')
    +TLV($F,'en')
    +key
    );
    notifyListeners(IE_loggin);
    end;


    может кто-то знает алгоритм подготовки icq хеша?
    автор программы icq.message.logger утверждает что это md5 (соль + пароль + константа), но мне кажется он сложнее... судя по этим функциям на Си и Делфи
     
  4. crystalbit

    crystalbit Elder - Старейшина

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    Кликни держа ctrl на tmd5digest и узнаешь, походу это просто сложный тип

    Там мд5, но мд5 не пароля, а пароля с солью в изощренной форме
     
  5. sw_max

    sw_max New Member

    Joined:
    8 Jul 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    контрал-клики ничего не дают :(

    про изощренную форму в курсе, ее и пытаемся понять! что в этом примере, что в начале на Си - одно и то же делается, вопрос - что!?