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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
15-1139141206
Gero
2006-02-05 15:06
2006.02.26
Jpeg2000


15-1138982087
Loginov Dmitry
2006-02-03 18:54
2006.02.26
Зацените страничку :)


15-1139061986
AdmeraL
2006-02-04 17:06
2006.02.26
Где можно скачать DXF файлы?


2-1139686084
-Андрей-
2006-02-11 22:28
2006.02.26
Таблица в Access


15-1138016360
Nous Mellon_
2006-01-23 14:39
2006.02.26
Сайт php.ru





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский