PDA

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


Linuxo
19.11.2008, 20:00
добрый день!
я учусь программировать на делфи, но совсем не знаю синтаксиса Си...

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


#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 - случайная строка, которая дается сервером

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

Спасибо.

slesh
20.11.2008, 10:20
Это всеголишь заголовочный файл типа *.h в котором описаны константы и функции. Сами функции поищи в файле с такимще названием но расширением или .c или .cpp

sw_max
20.11.2008, 12:34
да нет... тут идет вызов только стандартных функций МД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[I]) := 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[I];
// 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 (соль + пароль + константа), но мне кажется он сложнее... судя по этим функциям на Си и Делфи

crystalbit
20.11.2008, 13:20
Кликни держа ctrl на tmd5digest и узнаешь, походу это просто сложный тип

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

sw_max
20.11.2008, 14:54
Кликни держа ctrl на tmd5digest и узнаешь, походу это просто сложный тип

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

контрал-клики ничего не дают :(

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