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

Вниз

winsock - авторизация   Найти похожие ветки 

 
Delphi_is_cool ©   (2005-08-15 02:49) [0]

Как авторизироваться на smtp серваке ? Для последующей отправки почты.


 
pepper ©   (2005-08-15 06:33) [1]

RFC2554
        S: 220 smtp.example.com ESMTP server ready
        C: EHLO jgm.example.com
        S: 250-smtp.example.com
        S: 250 AUTH CRAM-MD5 DIGEST-MD5
        C: AUTH FOOBAR
        S: 504 Unrecognized authentication type.
        C: AUTH CRAM-MD5
        S: 334
        PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=
        C: ZnJlZCA5ZTk1YWVlMDljNDBhZjJiODRhMGMyYjNiYmFlNzg2ZQ==
        S: 235 Authentication successful.


 
Delphi_is_cool ©   (2005-08-15 18:58) [2]

Можно по подробней плиз.


 
Delphi_is_cool ©   (2005-08-15 18:58) [3]

Можно по подробней плиз.


 
Slym ©   (2005-08-16 04:57) [4]

Подробнее в Яндексе - RFC2554


 
sunsay ©   (2005-11-17 15:48) [5]

pepper как раз оттуда и показывает пример ( из которого ничче не ясно )....
Подробности - RFC 2195
Ещё полезно заглянуть сюда:
http://bog.pp.ru/work/SASL.html


 
sunsay ©   (2005-11-17 21:34) [6]

Тоже этой проблемой занимался - вот набросал функцию, формирующую
HMAC-MD5 строчку (мож кому пригодится).


//-------------------------------------------------------------------------------//
// Функция вычисления HMAC для MD5 алгоритма                                     //
//                                                                               //
// INP: Key - ключ                                                               //
//      Text - текст                                                             //
// OUT: хешированная строка                                                      //
//-------------------------------------------------------------------------------//
function HMAC_MD5(Key: String; const Text: String): String;
const
 cBlockSize = 64; // размер блока данных
 // константы для вычисления HMAC-MD5 для CRAM-MD5
 ipad = $36;
 opad = $5C;

 procedure XORBlock (var Buf: String; const XOR8: Byte);
 var
   I: Integer;
 begin
   For I := 1 to Length(Buf) do
     Buf[I] := Char(Byte(Buf[I]) xor XOR8);
 end;

 function HMAC_KeyBlock(const Key; const KeySize: Integer): String;
 var
   P: PChar;
   Buf: String;
 Begin
   SetLength (Buf, cBlockSize);
   P := Pointer (Buf);
   if (KeySize > 0) then begin
     Move (Key, P^, KeySize);
     Inc (P, KeySize);
   end;
   FillChar (P^, cBlockSize - KeySize, #0);
   Result := Buf;
 End;

var
 TempS: String;
begin
 Result := "";
 if (Length(Key) > cBlockSize) then
   // хешируем ключ, и уже этот ключ
   // используем в качестве ключа
   Key := MD5DigestAsString(HashMD5(Key));

{    (1) append zeros to the end of K to create a B byte string
       (e.g., if K is of length 20 bytes and B=64, then K will be
        appended with 44 zero bytes 0x00)}
 Key := HMAC_KeyBlock(PChar(Key)^, Length(Key));

{    (2) XOR (bitwise exclusive-OR) the B byte string computed in step
       (1) with ipad}
 TempS := Key;
 XORBlock(TempS, ipad);

{    (3) append the stream of data "text" to the B byte string resulting
       from step (2)}
 TempS := TempS + Text;

{    (4) apply H to the stream generated in step (3)}
 Result := MD5DigestAsString(HashMD5(TempS));

{    (5) XOR (bitwise exclusive-OR) the B byte string computed in
       step (1) with opad}
 TempS := Key;
 XORBlock(TempS, opad);

{    (6) append the H result from step (4) to the B byte string
       resulting from step (5)}
 TempS := TempS + Result;

{    (7) apply H to the stream generated in step (6) and output
       the result}
 Result := MD5DigestAsHex(HashMD5(TempS));
end;

//....
// где-то в какой-то процедурке (при соединении с SMTP сервером):

 // отсылаем серваку запрос "AUTH CRAM-MD5"
 ResLine := SendCommand("AUTH CRAM-MD5");
 // тут проверяем какой код вернул сервак (должен вернуть 334).
 // помимо кода, сервак высылает "приглашение", закодированное
 // в base64 - записываем это приглашение в Challange - тут
 // писать не буду (ибо просто)
 Challange := Base64Decode(Challange);
 ResLine := SendCommand(Base64Encode(Username + " " + HMAC_MD5(Password, Challange)));
 // мечтаем, чтоб результат был 235



Естественно должны быть реализованны функции
Base64Encode
Base64Decode
HashMD5
MD5DigestAsHex - возвращает 32 байтовый MD5 ввиде HEX
MD5DigestAsString - возвращает 16 байт MD5 (грубо говоря последовательность четырех двойных слов, только в типе String)

Удачи.



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

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
15-1139232268
Игорь Шевченко
2006-02-06 16:24
2006.02.26
Очередная дырка в Windows или не смотрите метафайлы


2-1139303209
pathfinder
2006-02-07 12:06
2006.02.26
ADO и все такое..


8-1127054976
kwazimorda
2005-09-18 18:49
2006.02.26
Графика....TImage....яркость, печать ...... и т.д.


3-1136030914
makvell
2005-12-31 15:08
2006.02.26
импорт в Word


2-1139210354
BlackCat
2006-02-06 10:19
2006.02.26
fkCalculated