Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.30;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.058 c
1-1084783750
OlegM
2004-05-17 12:49
2004.05.30
Идиотский вопрос но есть application.Minimize; а обратная функция


14-1084299724
ИМХО
2004-05-11 22:22
2004.05.30
Кто-нить уже создает справки в новом формате?


1-1085044874
NetworK
2004-05-20 13:21
2004.05.30
Объект как var параметр ф-ции


1-1084886617
Empleado
2004-05-18 17:23
2004.05.30
try


14-1084128355
VID
2004-05-09 22:45
2004.05.30
Как узнать в какой папке лежат файлы...