Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подскажите алгоритм хэширования

7.8K
18 сентября 2006 года
littlefrankie
57 / / 23.08.2006
Значит есть у меня двунаправленный список. Это конструкция типа
typedef struct MyList {
SomeData somedata;
MyList *pprev;
MyList *pnext;
}MyList;
SomeData - это какая-либо структура с внутренними данными.
Есть функция которая создает элемент списка, вставляя его в нужное место и функции, работающие с элементами списка. Вопрос такой: Как мне защитить данные в MyList, чтобы юзер не имел к ним доступ. Я мыслю так: Функция создания элемента должна возвращать не сам поинтер на экземпляр MyList, а что-нибудь вроде
HASH Hash(MyList *pml);
A Функции, работающие с экземплярами соответственно на входе нринимают HASH.
Подскажите алгоритм для хэш функции! Желательно быстрый и эффективный))

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

Заранее спасибо!!!
7.8K
18 сентября 2006 года
littlefrankie
57 / / 23.08.2006
И еще один нюанс: обратная хэш функция должна знать, верный хэш или нет. То есть если GetpMyListFromHash(HASH Hash) принимаеть на входе несуществующий хэш, то она должна вернуть NULL
240
18 сентября 2006 года
aks
2.5K / / 14.07.2006
А что понимается под защитой от пользователя?
Чтобы пользователь мог пользоваться этими функциями в своем коде, но не мог менять данные, работая только через интерфейс функций?
Или чтобы пользователь не мог вобще скажем сделать дамп памяти работающего процесса и оттуда извлечь не зашифрованные данные? =))

Если первое то это решается средствами C++ без всяких хэшей. Просто реализуешь этот список классом. Собственно так такие вещи и реализуются. Делаешь данные приватными, а публичным только методы которые раньше были функциями. Которые и будут предоставлять нужный интерфейс работы с данными, но не предоставлять доступа к внутренней структуре списка.

А если тебе нужно хэширование, то какое - если одностороннее, то выигрыша не даст - ибо всеравно придется хэши перебирать, как индексы. Если же взаимооднозначное, то толку от него, если легко по хэшу получить изначальный адрес.
7.8K
19 сентября 2006 года
littlefrankie
57 / / 23.08.2006
классы тут не катят. такова специфика программы. А вообще я уже вышел из положения использованием массивов. При перемещении элемента просто меняется 1 поинтер)). Но всё равно спасибо))
7.8K
19 сентября 2006 года
littlefrankie
57 / / 23.08.2006
кстати, а если у меня есть функция которая на входе получает указатель на объект, как мне проверить является ли указатель верным???
240
19 сентября 2006 года
aks
2.5K / / 14.07.2006
В общем случае видимо никак. Указатель это же всего лишь адресс в памяти, и в нем не хранится информация о том, корректные в той памяти данные или нет.
Можно проверить на всякие явно неправильные значения типа 0 (NULL) или скажем (void*)-1, что в обычном 32-х разрядном случае равно 0xffffffff.

А что мешает всеже воспользоваться хотябы отчасти средствами ООП? Или программа пишется на голом C?
7.8K
20 сентября 2006 года
littlefrankie
57 / / 23.08.2006
Встречный вопрос: а что будет, если выполнить такой код??
PVOID myptr=<какое нибудь заведомо неверное значение>
(myclass *)myptr->myfunc();

а классы я не использую потому что они хавают память и тормозят систему. хотя и не значительно, но при достаточно большом их количестве расходуемая память возрастает. Хотя наверное основная причина - привык на асме кодить ))

зацени такой алгоритм проверки корректности указателя:
(всё в блоке try...catch...)
PDWORD pd = (PDWORD)pMyStruc;
DWORD rez=0;
for (int i=0;i<(sizeof(mystruc)>>2);i++)
rez=rez xor pd; //я не вспомню как в сях ксор выглядит))

if (rez!=SIGNATURE_MYSTRUC) {
//ERROR!!!
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог