Digest Auth: как посчитать HA1, имея только хэш пароля
От: alexr.r Украина  
Дата: 16.06.04 14:01
Оценка:
Хотелось бы сохранять пароль для последующей автоматической аутентификации в виде хэша. Но для digest аутентификации функция посчета HA1 использует строковый пароль:
A1 = username-value ":" realm-value ":" passwd
HA1 = HASH(A1)
Может есть способ посчитать HA1 имея HASH(paswd)

В реализации MD5 я не нашел (или не понял), как добавить существующий hash


сенкс
Re: Digest Auth: как посчитать HA1, имея только хэш пароля
От: aka50 Россия  
Дата: 17.06.04 06:47
Оценка:
Здравствуйте, alexr.r, Вы писали:

AR>Хотелось бы сохранять пароль для последующей автоматической аутентификации в виде хэша. Но для digest аутентификации функция посчета HA1 использует строковый пароль:

AR>A1 = username-value ":" realm-value ":" passwd
AR>HA1 = HASH(A1)
AR>Может есть способ посчитать HA1 имея HASH(paswd)

AR>В реализации MD5 я не нашел (или не понял), как добавить существующий hash

AR>

AR>сенкс


если у тебя OpenSSL то в можно обойтись хаком: проставить A B C D в то что у тебя в подписи (4 u_int32_t = 16 bytes). Если это какой-нить CryptoAPI, то фиг знает... но для твоих задач можно и OpenSSL попользовать...
Re[2]: Digest Auth: как посчитать HA1, имея только хэш парол
От: alexr.r Украина  
Дата: 17.06.04 07:13
Оценка:
Здравствуйте, aka50, Вы писали:

A>Здравствуйте, alexr.r, Вы писали:


AR>>Хотелось бы сохранять пароль для последующей автоматической аутентификации в виде хэша. Но для digest аутентификации функция посчета HA1 использует строковый пароль:

AR>>A1 = username-value ":" realm-value ":" passwd
AR>>HA1 = HASH(A1)
AR>>Может есть способ посчитать HA1 имея HASH(paswd)

AR>>В реализации MD5 я не нашел (или не понял), как добавить существующий hash

AR>>

AR>>сенкс


A>если у тебя OpenSSL то в можно обойтись хаком: проставить A B C D в то что у тебя в подписи (4 u_int32_t = 16 bytes). Если это какой-нить CryptoAPI, то фиг знает... но для твоих задач можно и OpenSSL попользовать...


Спасибо. Хотя, честно говоря, не понял — я не использую OpenSSL —
у меня есть код digest аутентификации, вот кусок расчета HA1:

CStringA ADigestAuthField::calcHA1(CStringA password)
{
   HASH ha1;
   CMD5Checksum md5;
   md5.Update(this->fUsername.GetString(), this->fUsername.GetLength());
   md5.Update(":", 1);
   md5.Update(this->fRealm.GetString(), this->fRealm.GetLength());
   md5.Update(":", 1);
   md5.Update(password.GetString(), password.GetLength()); // вот сдесь включается строковый пароль
   memcpy(ha1, md5.Final(), HASHLEN);

   if (this->fAlgorithm == sip::alMD5Sess)
   {
      CMD5Checksum md5;
      md5.Update(ha1, HASHLEN);
      md5.Update(":", 1);
      md5.Update(this->fNonce.GetString(), this->fNonce.GetLength());
      md5.Update(":", 1);
      md5.Update(this->fCnonce.GetString(), this->fCnonce.GetLength());
      memcpy(ha1, md5.Final(), HASHLEN);
   }
   return hash2hex(ha1);
}

CStringA hash2hex(HASH h)
{
   CStringA hex;
   hex.Format("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
      h[0],  h[1], h[2],  h[3],  h[4],  h[5],  h[6],  h[7],
      h[8],  h[9], h[10], h[11], h[12], h[13], h[14], h[15]);
   return hex;
}
Re[3]: Digest Auth: как посчитать HA1, имея только хэш парол
От: aka50 Россия  
Дата: 17.06.04 07:49
Оценка:
Здравствуйте, alexr.r, Вы писали:


AR>Спасибо. Хотя, честно говоря, не понял — я не использую OpenSSL —

AR>у меня есть код digest аутентификации, вот кусок расчета HA1:

AR>CStringA ADigestAuthField::calcHA1(CStringA password)
AR>{
AR>   HASH ha1;
AR>   CMD5Checksum md5;

Вот CMD5Checksum в этом классе есть (должны быть) его внутренне состояние, 4-е переменные A B C D. Дык вот, они скорее всего приватные.
Но если ты сможешь их утсановить в нужные значения, это и будет твоя стартовая позиция.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.