Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

md5 хеш или хз   Найти похожие ветки 

 
Raptoridze   (2004-04-05 17:07) [0]

вот при запросе авторизации эксплорером, ввел
в поле логин ввел ivan, в поле password ввел 123456
вот какой запрос сформировал эксплорер
Authorization: Digest username="ivan", realm="hotmail.com", qop="auth", algorithm="MD5", uri="/svcs/hotmail/httpmail.asp", nonce="MTA4MTE2ODk5NTo2YzUwODNmZGVlYTU1NGExNTZiOTEwOGM3MDkyMGIyOA==", nc=00000001, cnonce="5525fb06b40f969f923d4a628822aaa7", response="b2e817a244a44c95e3a9bf7a61135cb3"

как он его так сформировал)
подскажите еси кто знает очень нуна


 
VMcL ©   (2004-04-05 17:42) [1]

Ну, наверное, тебе сюда: ftp://ftp.isi.edu/in-notes/rfc2617.txt


 
Raptoridze   (2004-04-05 18:35) [2]

млин там все на англицком и помойму фиг разберуся, моге у кого то есть кусок кода который там приведен под дельфи?


 
Raptoridze   (2004-04-05 18:45) [3]

или могет есть компонента для авторизации на сайте, кроме конечно Twebbrowser`a


 
Verg ©   (2004-04-05 18:51) [4]

Так TIdHTTP это же все умеет. Вроде.


 
Raptoridze   (2004-04-05 19:31) [5]

я уже начал с ним разбираться, но вот трабля вылазит ерор почему то
Range check error
что это такое?


 
Raptoridze   (2004-04-05 19:39) [6]

и вылазит еси введи userid и пассворд, без них все ок


 
Raptoridze   (2004-04-05 20:59) [7]

нда...... судя по всему эта компонента работает только с обычной авторизациеей, а мне нуна вот эта Digest
люди хелп кто чём могет....


 
Verg ©   (2004-04-05 21:21) [8]

А ты попробуй последнии версии Indy с http://www.indyproject.org


 
Raptoridze   (2004-04-05 22:27) [9]

сенкс за ссылку ща испробуем


 
Raptoridze   (2004-04-05 23:43) [10]

тоже самое.....
таво что мне нуна нету(


 
Reindeer Moss Eater ©   (2004-04-06 09:07) [11]

В девятом релизе есть модуль поддержки Digest авторизации.
Но он не зарегистрирован и не используется библиотекой. Кроме того написан с явными ошибками.
Выход один - читать 2617 и делать свою реализацию.


 
Raptoridze   (2004-04-06 13:08) [12]

млин, что же делать?((((


 
Verg ©   (2004-04-06 13:38) [13]


> Raptoridze   (06.04.04 13:08) [12]
> млин, что же делать?((((


Изучить этот RFC2617

По MD5 можно взять процедурки от Synapse:

type
 TMD5Ctx = record
   State: array[0..3] of Integer;
   Count: array[0..1] of Integer;
   case Integer of
     0: (BufChar: array[0..63] of Byte);
     1: (BufLong: array[0..15] of Integer);
 end;
procedure MD5Init(var MD5Context: TMD5Ctx);
begin
 FillChar(MD5Context, SizeOf(TMD5Ctx), #0);
 with MD5Context do
 begin
   State[0] := Integer($67452301);
   State[1] := Integer($EFCDAB89);
   State[2] := Integer($98BADCFE);
   State[3] := Integer($10325476);
 end;
end;

procedure MD5Transform(var Buf: array of LongInt; const Data: array of LongInt);
var
 A, B, C, D: LongInt;

 procedure Round1(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
 begin
   Inc(W, (Z xor (X and (Y xor Z))) + Data);
   W := (W shl S) or (W shr (32 - S));
   Inc(W, X);
 end;

 procedure Round2(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
 begin
   Inc(W, (Y xor (Z and (X xor Y))) + Data);
   W := (W shl S) or (W shr (32 - S));
   Inc(W, X);
 end;

 procedure Round3(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
 begin
   Inc(W, (X xor Y xor Z) + Data);
   W := (W shl S) or (W shr (32 - S));
   Inc(W, X);
 end;

 procedure Round4(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte);
 begin
   Inc(W, (Y xor (X or not Z)) + Data);
   W := (W shl S) or (W shr (32 - S));
   Inc(W, X);
 end;
begin
 A := Buf[0];
 B := Buf[1];
 C := Buf[2];
 D := Buf[3];

 Round1(A, B, C, D, Data[0] + Longint($D76AA478), 7);
 Round1(D, A, B, C, Data[1] + Longint($E8C7B756), 12);
 Round1(C, D, A, B, Data[2] + Longint($242070DB), 17);
 Round1(B, C, D, A, Data[3] + Longint($C1BDCEEE), 22);
 Round1(A, B, C, D, Data[4] + Longint($F57C0FAF), 7);
 Round1(D, A, B, C, Data[5] + Longint($4787C62A), 12);
 Round1(C, D, A, B, Data[6] + Longint($A8304613), 17);
 Round1(B, C, D, A, Data[7] + Longint($FD469501), 22);
 Round1(A, B, C, D, Data[8] + Longint($698098D8), 7);
 Round1(D, A, B, C, Data[9] + Longint($8B44F7AF), 12);
 Round1(C, D, A, B, Data[10] + Longint($FFFF5BB1), 17);
 Round1(B, C, D, A, Data[11] + Longint($895CD7BE), 22);
 Round1(A, B, C, D, Data[12] + Longint($6B901122), 7);
 Round1(D, A, B, C, Data[13] + Longint($FD987193), 12);
 Round1(C, D, A, B, Data[14] + Longint($A679438E), 17);
 Round1(B, C, D, A, Data[15] + Longint($49B40821), 22);

 Round2(A, B, C, D, Data[1] + Longint($F61E2562), 5);
 Round2(D, A, B, C, Data[6] + Longint($C040B340), 9);
 Round2(C, D, A, B, Data[11] + Longint($265E5A51), 14);
 Round2(B, C, D, A, Data[0] + Longint($E9B6C7AA), 20);
 Round2(A, B, C, D, Data[5] + Longint($D62F105D), 5);
 Round2(D, A, B, C, Data[10] + Longint($02441453), 9);
 Round2(C, D, A, B, Data[15] + Longint($D8A1E681), 14);
 Round2(B, C, D, A, Data[4] + Longint($E7D3FBC8), 20);
 Round2(A, B, C, D, Data[9] + Longint($21E1CDE6), 5);
 Round2(D, A, B, C, Data[14] + Longint($C33707D6), 9);
 Round2(C, D, A, B, Data[3] + Longint($F4D50D87), 14);
 Round2(B, C, D, A, Data[8] + Longint($455A14ED), 20);
 Round2(A, B, C, D, Data[13] + Longint($A9E3E905), 5);
 Round2(D, A, B, C, Data[2] + Longint($FCEFA3F8), 9);
 Round2(C, D, A, B, Data[7] + Longint($676F02D9), 14);
 Round2(B, C, D, A, Data[12] + Longint($8D2A4C8A), 20);

 Round3(A, B, C, D, Data[5] + Longint($FFFA3942), 4);
 Round3(D, A, B, C, Data[8] + Longint($8771F681), 11);
 Round3(C, D, A, B, Data[11] + Longint($6D9D6122), 16);
 Round3(B, C, D, A, Data[14] + Longint($FDE5380C), 23);
 Round3(A, B, C, D, Data[1] + Longint($A4BEEA44), 4);
 Round3(D, A, B, C, Data[4] + Longint($4BDECFA9), 11);
 Round3(C, D, A, B, Data[7] + Longint($F6BB4B60), 16);
 Round3(B, C, D, A, Data[10] + Longint($BEBFBC70), 23);
 Round3(A, B, C, D, Data[13] + Longint($289B7EC6), 4);
 Round3(D, A, B, C, Data[0] + Longint($EAA127FA), 11);
 Round3(C, D, A, B, Data[3] + Longint($D4EF3085), 16);
 Round3(B, C, D, A, Data[6] + Longint($04881D05), 23);
 Round3(A, B, C, D, Data[9] + Longint($D9D4D039), 4);
 Round3(D, A, B, C, Data[12] + Longint($E6DB99E5), 11);
 Round3(C, D, A, B, Data[15] + Longint($1FA27CF8), 16);
 Round3(B, C, D, A, Data[2] + Longint($C4AC5665), 23);

 Round4(A, B, C, D, Data[0] + Longint($F4292244), 6);
 Round4(D, A, B, C, Data[7] + Longint($432AFF97), 10);
 Round4(C, D, A, B, Data[14] + Longint($AB9423A7), 15);
 Round4(B, C, D, A, Data[5] + Longint($FC93A039), 21);
 Round4(A, B, C, D, Data[12] + Longint($655B59C3), 6);
 Round4(D, A, B, C, Data[3] + Longint($8F0CCC92), 10);
 Round4(C, D, A, B, Data[10] + Longint($FFEFF47D), 15);
 Round4(B, C, D, A, Data[1] + Longint($85845DD1), 21);
 Round4(A, B, C, D, Data[8] + Longint($6FA87E4F), 6);
 Round4(D, A, B, C, Data[15] + Longint($FE2CE6E0), 10);
 Round4(C, D, A, B, Data[6] + Longint($A3014314), 15);
 Round4(B, C, D, A, Data[13] + Longint($4E0811A1), 21);
 Round4(A, B, C, D, Data[4] + Longint($F7537E82), 6);
 Round4(D, A, B, C, Data[11] + Longint($BD3AF235), 10);
 Round4(C, D, A, B, Data[2] + Longint($2AD7D2BB), 15);
 Round4(B, C, D, A, Data[9] + Longint($EB86D391), 21);

 Inc(Buf[0], A);
 Inc(Buf[1], B);
 Inc(Buf[2], C);
 Inc(Buf[3], D);
end;


 
Verg ©   (2004-04-06 13:39) [14]

procedure MD5Update(var MD5Context: TMD5Ctx; const Data: string);
var
 Index, t, len: Integer;
begin
 len := Length(Data);
 with MD5Context do
 begin
   T := Count[0];
   Inc(Count[0], Len shl 3);
   if Count[0] < T then
     Inc(Count[1]);
   Inc(Count[1], Len shr 29);
   T := (T shr 3) and $3F;
   Index := 0;
   if T <> 0 then
   begin
     Index := T;
     T := 64 - T;
     if Len < T then
     begin
       Move(Data, Bufchar[Index], Len);
       Exit;
     end;
     Move(Data, Bufchar[Index], T);
     MD5Transform(State, Buflong);
     Dec(Len, T);
     Index := T;
   end;
   while Len > 64 do
   begin
     Move(Data[Index + 1], Bufchar, 64);
     MD5Transform(State, Buflong);
     Inc(Index, 64);
     Dec(Len, 64);
   end;
   Move(Data[Index + 1], Bufchar, Len);
 end
end;

function MD5Final(var MD5Context: TMD5Ctx): string;
var
 Cnt: Word;
 P: Byte;
 digest: array[0..15] of Char;
 i: Integer;
begin
 for I := 0 to 15 do
   Byte(Digest[I]) := I + 1;
 with MD5Context do
 begin
   Cnt := (Count[0] shr 3) and $3F;
   P := Cnt;
   BufChar[P] := $80;
   Inc(P);
   Cnt := 64 - 1 - Cnt;
   if Cnt > 0 then
     if Cnt < 8 then
     begin
       FillChar(BufChar[P], Cnt, #0);
       MD5Transform(State, BufLong);
       FillChar(BufChar, 56, #0);
     end
     else
       FillChar(BufChar[P], Cnt - 8, #0);
   BufLong[14] := Count[0];
   BufLong[15] := Count[1];
   MD5Transform(State, BufLong);
   Move(State, Digest, 16);
   Result := "";
   for i := 0 to 15 do
     Result := Result + Char(digest[i]);
 end;
 FillChar(MD5Context, SizeOf(TMD5Ctx), #0)
end;

{==============================================================================}

function MD5(const Value: string): string;
var
 MD5Context: TMD5Ctx;
begin
 MD5Init(MD5Context);
 MD5Update(MD5Context, Value);
 Result := MD5Final(MD5Context);
end;

{==============================================================================}

function HMAC_MD5(Text, Key: string): string;
var
 ipad, opad, s: string;
 n: Integer;
 MD5Context: TMD5Ctx;
begin
 if Length(Key) > 64 then
   Key := md5(Key);
 ipad := "";
 for n := 1 to 64 do
   ipad := ipad + #$36;
 opad := "";
 for n := 1 to 64 do
   opad := opad + #$5C;
 for n := 1 to Length(Key) do
 begin
   ipad[n] := Char(Byte(ipad[n]) xor Byte(Key[n]));
   opad[n] := Char(Byte(opad[n]) xor Byte(Key[n]));
 end;
 MD5Init(MD5Context);
 MD5Update(MD5Context, ipad);
 MD5Update(MD5Context, Text);
 s := MD5Final(MD5Context);
 MD5Init(MD5Context);
 MD5Update(MD5Context, opad);
 MD5Update(MD5Context, s);
 Result := MD5Final(MD5Context);
end;


 
nikkie ©   (2004-04-06 13:44) [15]

>В девятом релизе есть модуль поддержки Digest авторизации.
Но он не зарегистрирован и не используется библиотекой. Кроме того написан с явными ошибками.
Выход один - читать 2617 и делать свою реализацию.

а может взять его из нерелизной версии или поискать в группе обсуждения этой темы? я помню, например, код работы ftp через прокси у них был давным-давно, а в релизе почему-то отсутствовал.


 
Reindeer Moss Eater ©   (2004-04-06 14:01) [16]

nikkie ©

Основная сложность реализации Digest - это не сложность вычисления MD5 по каким-то алгоритмам и используя какие-то свои данные и данные сервера. Это как раз делается за 15 минут.
Сложность в том, что надо от запроса к запросу запоминать параметры авторизации запрашиваемые сервером и где то из хранить. Например сервер может решить не генерировать уникальный nonce на каждый запрос клиента, а сказать ему - используй первый и давай мне правильный счетчик ncount его использования, который организуй сам.
В общем иногда приходится хранить историю общения с сервером.


 
Raptoridze   (2004-04-08 15:16) [17]


> Основная сложность реализации Digest - это не сложность
> вычисления MD5 по каким-то алгоритмам и используя какие-то
> свои данные и данные сервера. Это как раз делается за 15
> минут.

а есть примерчик?


 
Reindeer Moss Eater ©   (2004-04-08 15:26) [18]

Если б ты заглянул в 2617, то нашел бы там свой примерчик.


 
raptoridze   (2004-04-08 20:32) [19]

примерчик на сишнике), а мне нуна на дельфи)


 
nikkie ©   (2004-04-08 21:56) [20]

>[16] Reindeer Moss Eater ©   (06.04.04 14:01)
>nikkie ©
>Основная сложность реализации Digest - это не сложность вычисления MD5...
я-то тут причем? текст, вероятно, адресован Verg-у, который опубликовал реализацию MD5? я просто вставил комментарий - бывает, что интересующий код можно найти в рабочей версии, а не в релизе библиотеки. опен-сорс, елы-палы.


 
Reindeer Moss Eater ©   (2004-04-09 09:11) [21]

а мне нуна на дельфи)

Реализацию MD5 на Delphi тебе уже дали.
Остается перевести с языка С операции конкатенации строк и опреатор if.
Это может вызвать какие-то трудности даже у начинающего?


 
Raptoridze   (2004-04-09 16:07) [22]

ок, попробую
ну я просто как обычно хотел, чтобы расжували и с ложки покормили))))


 
Raptoridze   (2004-04-09 21:01) [23]

а млин, не получаеться((


 
Pat ©   (2004-04-10 03:40) [24]

>а млин, не получаеться((
Видать, не читал ты RFC...а зря

Алгоритм:
response = MD5(MD5(A1):nonce-value:nc-value:cnonce-value:qop-value:MD5(A2))
A1 = username-value:realm-value:passwd
A2 = Method:digest-uri-value

Твой пример:
Authorization: Digest username="ivan",
realm="hotmail.com",
qop="auth",
algorithm="MD5",
uri="/svcs/hotmail/httpmail.asp",
nonce="MTA4MTE2ODk5NTo2YzUwODNmZGVlYTU1NGExNTZiOTEwOGM3MDkyMGIyOA==",
nc=00000001,
cnonce="5525fb06b40f969f923d4a628822aaa7",
response="b2e817a244a44c95e3a9bf7a61135cb3"

A1 = ivan:hotmail.com:123456
A2 = GET:/svcs/hotmail/httpmail.asp
MD5(A1) = 70bf01e7836481747824299803e9785b
MD5(A2) = 068865d31c9c5702b04e20ef9a74ce75

responce = MD5(70bf01e7836481747824299803e9785b:
MTA4MTE2ODk5NTo2YzUwODNmZGVlYTU1NGExNTZiOTEwOGM3MDkyMGIyOA==:
00000001:5525fb06b40f969f923d4a628822aaa7:auth:068865d31c9c5702b04e20ef9a74ce75)=
b2e817a244a44c95e3a9bf7a61135cb3



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.037 c
14-1083982887
Думкин
2004-05-08 06:21
2004.05.30
С днем рождения! 8 мая


7-1082457244
FREEMAN82
2004-04-20 14:34
2004.05.30
передача параметров в поток


6-1081253057
Kme
2004-04-06 16:04
2004.05.30
Как скачать файл из сети


1-1084715381
RomeoGolf
2004-05-16 17:49
2004.05.30
Free и nil - как корректнее совместить?


14-1084088162
Cerber
2004-05-09 11:36
2004.05.30
Интерненет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский