![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| AlDev |
|
|||
|
Опытный идиотъ ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1927 Регистрация: 17.4.2005 Где: Irk, rus Репутация: нет Всего: 50 |
помогите pls разобраться
я в c++ оччень плохо разбираюсь, собственно не могу понять алгоритм метода. Помогите pls разобраться, что и как тут происходит? |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Alex Batsuev
Вам обратную надо ? Дык так и скажите Суть фишка. Генерирует двоичный хеш для "простой текстовой строки" (для пароля). Вход пароль и его длина. Выход - этот самый хэш. (я так понимаю что буфер под него выделяется заранее и равен 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) со сброшенным старшим битом (самый старший бит, он же известен как "знак" ("+" или "-")) ЗЫ Типа того здесь не Си++, здесь просто Си |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: нет Всего: 26 |
Думаю будет понятнее если ты скажешь откуда этот кусок выдран и что он должен делать.
Добавлено @ 13:21 Впрочем тут уже и так всё ясно. -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| AlDev |
|
|||
|
Опытный идиотъ ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1927 Регистрация: 17.4.2005 Где: Irk, rus Репутация: нет Всего: 50 |
мне надо алгоритм понять GrayCardinal спасибо |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Вот бы все так |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |