Murmur2

Murmur2

MurmurHash2 — простая и быстрая хэш-функция общего назначения, разработанная Остинон Апплеби. Не является криптографически-безопасной, возвращает 32-разрядное беззнаковое число.

Из достоинств функции авторами отмечена простота, хорошее распределение, мощный лавинный эффект, высокая скорость и сравнительно высокая устойчивость к коллизиям. Текущие версии алгоритма оптимизированы под Intel-совместимые процессоры.

Содержание

Пример кода

unsigned int MurmurHash2 ( char * key, unsigned int len)
{
  const unsigned int m = 0x5bd1e995;
  const unsigned int seed = 0;
  const int r = 24;
 
  unsigned int h = seed ^ len;
 
  const unsigned char * data = (const unsigned char *)key;
 
  while (len >= 4)
    {
      unsigned int k;
 
      k  = data[0];
      k |= data[1] << 8;
      k |= data[2] << 16;
      k |= data[3] << 24;
 
      k *= m;
      k ^= k >> r;
      k *= m;
 
      h *= m;
      h ^= k;
 
      data += 4;
      len -= 4;
    }
 
  switch (len)
    {
    case 3:
      h ^= data[2] << 16;
    case 2:
      h ^= data[1] << 8;
    case 1:
      h ^= data[0];
      h *= m;
    };
 
  h ^= h >> 13;
  h *= m;
  h ^= h >> 15;
 
  return h;
}

MurmurHash 2A

Вторая версия хэш-функции имеет некоторые недостатки. В частности, это проблема коллизий на небольших строках. Исправленный вариант имеет структуру типа Merkle-Damgard, выполняется немного медленнее (примерно на 20 %), но показывает лучшую статистику.

#define mmix(h,k) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }
 
unsigned int MurmurHash2A ( const void * key, int len, unsigned int seed )
{
        const unsigned int m = 0x5bd1e995;
        const int r = 24;
        unsigned int l = len;
 
        const unsigned char * data = (const unsigned char *)key;
 
        unsigned int h = seed;
 
        while(len >= 4)
        {
                unsigned int k = *(unsigned int*)data;
 
                mmix(h,k);
 
                data += 4;
                len -= 4;
        }
 
        unsigned int t = 0;
 
        switch(len)
        {
        case 3: t ^= data[2] << 16;
        case 2: t ^= data[1] << 8;
        case 1: t ^= data[0];
        };
 
        mmix(h,t);
        mmix(h,l);
 
        h ^= h >> 13;
        h *= m;
        h ^= h >> 15;
 
        return h;
}

MurmurHash2 — коллизии

Коллизии для алгоритма MurmurHash2 для текста в кодировке cp866:

30f0fa9f:   ПО-АВГУСТОВСКИ
            ПРОЛЕПЕТАЛА
3128688e:   DEADSORBIMENTO
            ОБРАЩЕННОМУ

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Murmur2" в других словарях:

  • Шифрование — Шифрование  преобразование информации в целях сокрытия от неавторизованных лиц, с предоставлением, в это же время, авторизованным пользователям доступа к ней. Главным образом, шифрование служит задаче соблюдения конфиденциальности… …   Википедия

  • Контрольная сумма — Контрольная сумма  некоторое значение, рассчитанное по набору данных путём применения определённого алгоритма и используемое для проверки целостности данных при их передаче или хранении. Также контрольные суммы могут использоваться для… …   Википедия

  • Циклический избыточный код — Эта статья  о коде. О методе мозгового штурма см. CRC карта. Циклический избыточный код (англ. Cyclic redundancy check, CRC[1])  алгоритм вычисления контрольной суммы, предназначенный для проверки целостности… …   Википедия

  • MD4 — Криптографическая хеш функция Название MD4 Создан 1990 г. Опубликован октябрь 1990 г. Размер хеша 128 бит Число раундов 3 Тип хеш функция MD4 (Message Digest 4 …   Википедия

  • SHA-1 — Криптографическая хеш функция Название SHA 1 Создан 1995 Опубликован 1995 Размер хеша 160 бит Число раундов 80 Тип хеш функция Secure Hash Algorithm 1  алгори …   Википедия

  • Криптография — Немецкая криптомашина Lorenz использовалась во время Второй мировой войны для шифрования самых секретных сообщений Криптография (от др. греч …   Википедия

  • MD5 — Проверить информацию. Необходимо проверить точность фактов и достоверность сведений, изложенных в этой статье. На странице обсуждения должны быть пояснения …   Википедия

  • Хеширование — Хеш функция, отображающая множество имён в множество натуральныых чисел Хеширование (иногда «хэширование», англ. hashing)  преобразование по детерменированному алгоритму входного массива данных прои …   Википедия

  • HAVAL — Криптографическая хеш функция Название HAVAL Создан 1992 Опубликован 1992 Размер хеша 128, 160, 192, 224, 256 бит Число раундов 96, 128, 160 Тип хеш функция HAVAL  однонаправленная …   Википедия

  • TTH — (Tiger Tree Hashing) тип хэш кода. Используется для того, чтобы проверять целостность данных (файлов), получить уникальный идентификатор файла, а также дает возможность восстановить файл. Впервые TTH появился в DC++ 0.400. Содержание 1 Пример 2… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»