Привет всем. Помогите разобраться с проблемой. Необходимо авторизоваться на почтовом сервере с помощью механизма Digest-MD5. Посмотрел как это делаеться в RFC 2831, но не могу пройти второй шаг авторизации. Выглядит это так:
S: nonce="Z+v9mjZOMiTrjTr/g+GDIiwfQaViBkAjp6OLvl+QOJs=",realm="POCHTA.RU",qop="auth
,auth-int,auth-conf",cipher="rc4-40,rc4-56,rc4,des,3des",maxbuf=4096,charset=utf-8,algorithm=md5-sess
C: username="ashe@hotbox.ru",realm="POCHTA.RU",nonce="Z+v9mjZOMiTrjTr/g+GDIiwfQaViB
kAjp6OLvl+QOJs=",cnonce="blablabla",nc=00000001,qop=auth,digest-uri="imap/mx.pochta.ru/hotbox.ru",
response=31055289d8810f2f70ba13d1da5da736,charset=utf-8
S: 0001 NO authentication failure
Response вычисляю таким образом:
private string ComputeResponseValue(DigestMD5Response resp)
{
string a1 = ComputeA1Value(resp);
string a2 = string.Format("{0}:{1}", "AUTHENTICATE", "imap/mx.pochta.ru/hotbox.ru");
a1 = GetMD5HashHex(a1);
a2 = GetMD5HashHex(a2);
string concatStr = string.Format("{0}:{1}:{2}:{3}:{4}:{5}",
a1, Encoding.ASCII.GetString(Convert.FromBase64String("Z+v9mjZOMiTrjTr/g+GDIiwfQaViBkAjp6OLvl+QOJs=")), "00000001", "blablabla", "auth", a2);
return GetMD5HashHex(concatStr);
}
private string ComputeA1Value(DigestMD5Response resp)
{
string strSS = string.Format(string.Format("{0}:{1}:{2}", "ashe@hotbox.ru", "POCHTA.RU", "**********"));
byte[] bytesSS = Encoding.ASCII.GetBytes(strSS);
bytesSS = new MD5CryptoServiceProvider().ComputeHash(bytesSS);
return string.Format("{0}:{1}:{2}", Encoding.ASCII.GetString(bytesSS), Encoding.ASCII.GetString(Convert.FromBase64String("Z+v9mjZOMiTrjTr/g+GDIiwfQaViBkAjp6OLvl+QOJs=")), "blablabla");
}
private string GetMD5HashHex(string input)
{
byte[] res = new MD5CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(input));
StringBuilder sOutput = new StringBuilder(res.Length);
for(int i = 0; i < res.Length; i++)
{
sOutput.Append(res[i].ToString("X2"));
}
return sOutput.ToString().ToLower();
}
Буду благодарен за любую помощь

. Заранее спасибо.