Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> код hasp_password(), не могу понять 
:(
    Опции темы
AlDev
Дата 26.11.2005, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: нет
Всего: 50



помогите pls разобраться
Код

/*
    Generate binary hash from raw text string 
    Used for Pre-4.1 password handling
  SYNOPSIS
    hash_password()
    result       OUT store hash in this location
    password     IN  plain text password to build hash
    password_len IN  password length (password may be not null-terminated)
*/

void hash_password(ulong *result, const char *password, uint password_len)
{
  register ulong nr=1345345333L, add=7, nr2=0x12345671L;
  ulong tmp;
  const char *password_end= password + password_len;
  for (; password < password_end; password++)
  {
    if (*password == ' ' || *password == '\t')
      continue;                                 /* skip space in password */
    tmp= (ulong) (uchar) *password;
    nr^= (((nr & 63)+add)*tmp)+ (nr << 8);
    nr2+=(nr2 << 8) ^ nr;
    add+=tmp;
  }
  result[0]=nr & (((ulong) 1L << 31) -1L); /* Don't use sign bit (str2int) */;
  result[1]=nr2 & (((ulong) 1L << 31) -1L);
}


я в c++ оччень плохо разбираюсь,
собственно не могу понять алгоритм метода. Помогите pls разобраться, что и как тут происходит?
PM MAIL WWW ICQ YIM MSN   Вверх
GrayCardinal
Дата 26.11.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



Alex Batsuev
Вам обратную надо ? Дык так и скажите smile

Суть фишка. Генерирует двоичный хеш для "простой текстовой строки" (для пароля). Вход пароль и его длина.
Выход - этот самый хэш. (я так понимаю что буфер под него выделяется заранее и равен 8 байтам). Короче - поганит нормальный пароль (21 байт) в 8 байт. Т.е. результат - 8 байт (nr, nr2, см. ниже).
Изначально установлены переменные. :

register ulong nr=1345345333L, add=7, nr2=0x12345671L;
(очень "оригинальные" цифры. "L" - значит только то что это "очень большие цифры". "0x" - шестнадцатиричные )
Далее. В цикле для каждого байта пароля (tmp - "текущий байт"). Все крутится вокруг nr и nr2 (каждая по четыре байта). add - типа "модификатора", к ней (переменной, четыре байта) прибавляется каждый байт пороля. Так же с каждым байтом пароля меняется
nr :
^= (выр) это "исключающее или" (XOR). Т.е. биты, которые в nr и (выр) :
nr (выр) рез
0 0 0
1 0 1
0 1 1
1 1 0
Т.е. если nr был 0xFF и (выр) получилось 0xFF, то результирующий (который и запишется обратно в nr - будет 0x00) И все это пишется обратно в nr. (понятно излагаю ?)
Насчет выражения :
(((nr & 63)+add)*tmp - взять первые 6 бит от nr, прибавить add и умножить на tmp (напомню tmp - текущий байт пароля)
+ (nr << 8) значит прибавить nr, сдвинутый влево на 8 бит. Т.е, по сути прибавится nr умноженный на 256 (2 в восьмой)

соответственно к nr2 прибавляется :
тот-же nr2 со сдвигом влево 8 (*256) и "исключающим или" по nr. Или, по-другому : от nr2 первый байт, становится вторым (первый байт nr2 - обнуляется, четвертый отбрасывается), а потом по нему (nr2 "текущий") еще XOR nr ("текущий").
Строчками 25, 26 тупо возвращается результат (nr, nr2) со сброшенным старшим битом (самый старший бит, он же известен как "знак" ("+" или "-"))

ЗЫ
Типа того smile
здесь не Си++, здесь просто Си smile




--------------------
PM MAIL WWW   Вверх
ToshaCh
Дата 26.11.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

Репутация: нет
Всего: 26



Думаю будет понятнее если ты скажешь откуда этот кусок выдран и что он должен делать.
Добавлено @ 13:21
Впрочем тут уже и так всё ясно.


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
AlDev
Дата 27.11.2005, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: нет
Всего: 50



Цитата(GrayCardinal @ 26.11.2005, 17:38)
Alex Batsuev
Вам обратную надо ? Дык так и скажите

мне надо алгоритм понять smile я на ActionScript3 перегоняю mysql client-а. выдрано из исходника mysql 4.1

GrayCardinal
спасибо smile по репе.
PM MAIL WWW ICQ YIM MSN   Вверх
GrayCardinal
Дата 28.11.2005, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 2
Всего: 58



Цитата
спасибо  по репе.

Вот бы все так smile


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.