Сейчас на форуме: 2nd, morgot, Rio, CDK123, zds, tyns777, tihiy_grom (+5 невидимых)

 eXeL@B —› Программирование —› DES(Unix) и md5(Unix) хэши
Посл.ответ Сообщение

Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 16 сентября 2008 04:12
· Личное сообщение · #1

Кто-нибудь знает где можно найти инфу по сабжу?
Интересует собственно алгоритм вычисления этих хешей.



Ранг: 8.1 (гость)
Активность: 0.010
Статус: Участник

Создано: 16 сентября 2008 06:54 · Поправил: BadM00nz
· Личное сообщение · #2

mb ...

--> DES <-- http://www.itl.nist.gov/fipspubs/fip46-2.htm
--> DES <-- http://orlingrabbe.com/des.htm
--> DES <-- http://www.adastral.ucl.ac.uk/~helger/crypto/link/block/des.php
--> MD5 <-- http://tools.ietf.org/html/rfc1321




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 16 сентября 2008 12:05 · Поправил: coderess
· Личное сообщение · #3

[DEL]

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 16 сентября 2008 13:11
· Личное сообщение · #4

BadM00nz, спасибо, но это не то((
Мне нужны алгоритмы хеширования.
Md5_unix отличается от обычного количеством проходов и еще чем-то.
DES_Unix - это тоже хеш, на основе DES.



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 16 сентября 2008 14:39 · Поправил: flamer
· Личное сообщение · #5

Доброго здоровья!
md5 это алгоритм, описанный в RFC 1321 http://rfc.net/rfc1321.html . "md5 для unix" - на столько же странное высказывание, насколько, к примеру, "компьютер для мальчика".

Путаницу в терминах вводят, например, пользователи apache->htpasswd.
Пример: $1$$I2o9Z7NcvQAKp7wyCTlia0 -- хеш, который выдает htpasswd под unix, основанный на MD5. Его иногда обзывают md5Unix.

Аналогичная ситуация с DES, использующим в качестве псевдо-случайного salt часть пароля.

Azur1d, тебе следует полазать по сырцам htpasswd, htpasswd2.



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 16 сентября 2008 17:13
· Личное сообщение · #6

Еще такой вопрос: почему хеш-калькулятор, расположенный здесь - www.insidepro.com/hashes.php?lang=eng выдает каждый раз разные значения md5(Unix) ???



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 16 сентября 2008 17:38 · Поправил: flamer
· Личное сообщение · #7

Если я не ошибаюсь, алгоритм, использующий md5 предполагает использование случайного salt
Применение регекспа /^\$(.*?)\$(.*?)\$(.*)$/ к хешу дает
\1 - тип хеша
\2 - salt
\3 - хеш исходной строки с этим salt-ом



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 16 сентября 2008 18:07
· Личное сообщение · #8

flamer, не думаю. это превращает хеш в обычный RNG и делает его непригодным для аутентификации.

да и unix`овая функция crypt (а копать как я понял нужно именно туда) принимает в себя солт извне.



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 16 сентября 2008 22:51
· Личное сообщение · #9

Кто-нибудь знает еще генератор хэшей, кроме вышеуказанного?



Ранг: 25.3 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 17 сентября 2008 10:30 · Поправил: flamer
· Личное сообщение · #10

Azur1d не надо думать, надо читать.
httpd-2.2.8.tar.bz2:httpd-2.2.8\support\htpasswd.c
Code:
  1. /*
  2.  * Make a password record from the given information.  A zero return
  3.  * indicates success; failure means that the output buffer contains an
  4.  * error message instead.
  5.  */
  6. static int mkrecord(char *user, char *record, apr_size_t rlen, char *passwd,
  7.                     int alg)
  8. {
  9.     char *pw;
  10.     char cpw[120];
  11.     char pwin[MAX_STRING_LEN];
  12.     char pwv[MAX_STRING_LEN];
  13.     char salt[9];
  14.     apr_size_t bufsize;
  15.     if (passwd != NULL) {
  16.         pw = passwd;
  17.     }
  18.     else {
  19.         bufsize = sizeof(pwin);
  20.         if (apr_password_get("New password: ", pwin, &bufsize) != 0) {
  21.             apr_snprintf(record, (rlen - 1), "password too long (>%"
  22.                          APR_SIZE_T_FMT ")", sizeof(pwin) - 1);
  23.             return ERR_OVERFLOW;
  24.         }
  25.         bufsize = sizeof(pwv);
  26.         apr_password_get("Re-type new password: ", pwv, &bufsize);
  27.         if (strcmp(pwin, pwv) != 0) {
  28.             apr_cpystrn(record, "password verification error", (rlen - 1));
  29.             return ERR_PWMISMATCH;
  30.         }
  31.         pw = pwin;
  32.         memset(pwv, '\0', sizeof(pwin));
  33.     }
  34.     switch (alg) {
  35.     case ALG_APSHA:
  36.         /* XXX cpw >= 28 + strlen(sha1) chars - fixed len SHA */
  37.         apr_sha1_base64(pw,strlen(pw),cpw);
  38.         break;
  39.     case ALG_APMD5:
  40.         (void) srand((int) time((time_t *) NULL));
  41.         to64(&salt[0], rand(), 8);
  42.         salt[8] = '\0';
  43.         apr_md5_encode((const char *)pw, (const char *)salt,
  44.                      cpw, sizeof(cpw));
  45.         break;
  46.     case ALG_PLAIN:
  47.         /* XXX this len limitation is not in sync with any HTTPd len. */
  48.         apr_cpystrn(cpw,pw,sizeof(cpw));
  49.         break;
  50. #if !(defined(WIN32) || defined(NETWARE))
  51.     case ALG_CRYPT:
  52.     default:
  53.         (void) srand((int) time((time_t *) NULL));
  54.         to64(&salt[0], rand(), 8);
  55.         salt[8] = '\0';
  56.         apr_cpystrn(cpw, (char *)crypt(pw, salt), sizeof(cpw) - 1);
  57.         break;
  58. #endif
  59.     }
  60.     memset(pw, '\0', strlen(pw));
  61.     /*
  62.      * Check to see if the buffer is large enough to hold the username,
  63.      * hash, and delimiters.
  64.      */
  65.     if ((strlen(user) + 1 + strlen(cpw)) > (rlen - 1)) {
  66.         apr_cpystrn(record, "resultant record too long", (rlen - 1));
  67.         return ERR_OVERFLOW;
  68.     }
  69.     strcpy(record, user);
  70.     strcat(record, ":");
  71.     strcat(record, cpw);
  72.     strcat(record, "\n");
  73.     return 0;

httpd-2.2.8\srclib\apr-util\crypto\apr_md5.c
Code:
  1. APU_DECLARE(apr_status_t) apr_md5_encode(const char *pw, const char *salt,
  2.                              char *result, apr_size_t nbytes)
  3. ...
  4.  sp = salt;
  5. ...
  6. sl = ep - sp;
  7. ...
  8. strcpy(passwd, apr1_id);
  9.     strncat(passwd, sp, sl);
  10.     strcat(passwd, "$");
  11. ...

Да, с DES'ом я отписался не перепроверив.
Но, в общем, ты напрасно проигнорировал посыл к htpasswd. не игнорируй в этот раз.



Ранг: 129.7 (ветеран), 2thx
Активность: 0.070
Статус: Участник

Создано: 17 сентября 2008 17:31
· Личное сообщение · #11

Всем спасибо. пробдема сама собой решилась)


 eXeL@B —› Программирование —› DES(Unix) и md5(Unix) хэши
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати