Алгоритм хеша для строк, с хешем размером 8-16 байт

Тема в разделе "WASM.CRYPTO", создана пользователем 10_Brasil, 3 янв 2007.

  1. 10_Brasil

    10_Brasil New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    54
    Подскажите алгоритм/библиотеку, может кто выложит готовую функцию
    для создания уникальных хешей размером 8-16 байт. Строковые значения у меня хранятся в базе данных, каждый день добавляется 300-500 тысяч записей, и база с каждым днем медленнее работает. Сперва хранил все в crc32 , все работало хорошо и быстро, но терялись уникальные строки... затем MD5 (повторений не было), но как показало время 32 байта для хеша в моем случае очень много как для моего диска так и для скорости работы базы. В общем ситуацию надеюсь растолковал. Заранее спасибо!
     
  2. tar4

    tar4 New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    43
    Я сейчас ковыряюсь с одной прогой и наткнулся на достаточно простой алгоритм создания хэша из 4 байт (на входе строка и ее размер). Впрочем, наверное, он для тебя мал?
     
  3. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    А зачем его в символьном виде хранить? Храни его в нормальном виде и получишь как раз 16 байт.
    А вообще хеш-функций целый вагон и ещё тележка. Посмотри на эту тему Брюса Шнайера и его книгу "Прикладная криптография", в электронном виде есть. Там и исходники, и описание, и всё, что душе угодно.

    http://ru.wikipedia.org/wiki/Хеш-функция
    Глянь внизу списочек функций, поищи их описание(хотя всё это есть у Шнайера).

    Когда найдёшь наиболее подходящую под твои требования можно уже и о реализации поговорить.
     
  4. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    10_Brasil

    MD5 и дает как раз 16 байт. Если нужно меньше, то почему бы не взять просто соответствующий вариант CRC, например CRC64?
     
  5. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
     
  6. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    500.000 записей Х 365 дней Х 5 лет = 2^30 записей

    -> Согласно парадоксу дней рождения, в первом приближении нужна хеш-сумма с пространством значений 2^60, чтобы вероятность коллизии была меньше 50%

    Округляем вверх -> получаем 64 бита.

    Я бы советовал просто взять первые 64 бита от MD5-значения (хранить - конечно же в двоичном виде, а не строковом).

    CRC все таки разрабатывался в первую очередь ради помехоустойчивости к искажениям, а не ради устойчивости к коллизиям - если не ошибаюсь, одинаковый CRC могут иметь 2 строки, отличающиеся всего в 2 битах "на неудачных позициях".