хеш для строк

Тема в разделе "WASM.BEGINNERS", создана пользователем Rodin, 18 май 2009.

  1. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    Нужен алгоритм для расчета хеша строки такой, чтобы удаление/добавление символа мало изменяла хеш.
    Например, хеши для строк: abcdefgh abdefgh abcdefqgh должны быть похожи.

    Куда копать?
     
  2. SmanxX1

    SmanxX1 Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    139
    Алгоритм Цезаря. :P
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    в сторону простого суммирования байт
     
  4. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    На выходе должно быть число.

    Сорри, не указал сразу - нужно избегать коллизий с другими строками.
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rodin
    Ну так и сделай себе два хеша. Первый - MD5, второй простым суммированием.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    я не гуру криптографии, но по-моему ты требуешь взаимоисключающие понятия
     
  7. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    MSoft
    согласен.

    Booster
    CRC32 имхо лучше для этой цели. И насколько я помню афтор требовал число.
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SPA
    >CRC32 имхо лучше для этой цели.
    Не суть, пусчай ТС выберет что его душе угодно.

    >И насколько я помню афтор требовал число.
    Вообще-то в компе всё представлено числами.
     
  9. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Booster
    Я не заканчивал школу шаманства, но я думаю что афтор имел в виду int32 с вероятностью 90%. Rodin не так ли?
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SPA
    Я ничего против не имею. CRC32 так CRC32. ^)
     
  11. SmanxX1

    SmanxX1 Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    139
    В общем вот: http://www.insidepro.com/hashes.php?lang=eng
    Посмотри и выбири подходящий.
     
  12. xzkol

    xzkol New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2008
    Сообщения:
    1
    вот пример реализации алгоритма CRC32 на C:

    Код (Text):
    1. unsigned long Crc32(const char *buf)
    2. {
    3.     // generate CRC32 hash
    4.    
    5.     unsigned long len;
    6.     unsigned long crc_table[256];
    7.     unsigned long crc;
    8.    
    9.     len = strlen(buf);
    10.  
    11.     for (int i = 0; i < 256; i++)
    12.     {
    13.         crc = i;
    14.         for (int j = 0; j < 8; j++)
    15.             crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;
    16.  
    17.         crc_table[i] = crc;
    18.     };
    19.  
    20.     crc = 0xFFFFFFFFUL;
    21.  
    22.     while (len--)
    23.         crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8);
    24.  
    25.     return crc ^ 0xFFFFFFFFUL;
    26. }