Функция хеширования для сокращения 8-байтового уникального идентификатора до 4-х байтового в C

Мне нужно выбрать функцию хеширования для преобразования уникального 8-байтового идентификатора в 4-байтовый идентификатор (как можно более уникальный) на 12-битном микроконтроллере (MSP430) на C.

Какую функцию хеширования вы бы посоветовали?

Я нашел несколько функций здесь, но не знаю, какую из них выбрать.

Обновлять: вот старый аналогичный вопрос, определяющий исходный уникальный формат идентификатора: Хеширование 64-битного значения в 32-битный MAC-адрес

Обновление 2:

 RSHash((const uint8_t*)ID_8BYTE, 8); 

uint32_t RSHash(const uint8_t* key, unsigned int len)
{
   uint32_t b    = 378551;
   uint32_t a    = 63689;
   uint32_t hash = 0;
   uint32_t i    = 0;

   for(i = 0; i < len; key++, i++)
   {
      hash = hash * a + (*key);
      a    = a * b;
   }

   return hash;
}

у вас уже есть 8-байтовый идентификатор, тогда байты довольно случайны, просто отрезайте любые 4 байта, я думаю

datdinhquoc 12.10.2018 10:36

Хм, интересно, может ли это быть лучше в другом месте (Криптография? Перекрестная проверка?), Поскольку я думаю, что ответ зависит от того, насколько хорошо распределены 8-байтовые хэши. Если они взяты из хорошего алгоритма хеширования, то, я думаю, будет работать любой алгоритм хеширования, но если есть предубеждения, вам может потребоваться особая обработка.

Ken Y-N 12.10.2018 10:38

Как писал Кен Й-Н, нам нужно больше узнать о 8-байтовом идентификаторе. Вопрос помечен как "uuid", может быть, это случайное число? В этом случае все биты случайны или только некоторые? Или это что-то еще, например порядковый номер? Если взять, скажем, 4 старших байта, то это будет хорошо, если все биты случайны, но очень плохо, если это порядковый номер!

Thomas Padron-McCarthy 12.10.2018 10:40

В зависимости от свойств 8-байтового IS LFSR может дать полезные результаты.

Kami Kaze 12.10.2018 10:42

Хм, без дополнительного контекста (как сконструирован исходный 8-байтовый идентификатор), это либо запрашивает ответы только на мнение, либо слишком широкое ... Так что просто мое мнение (следовательно, не ответ), но CRC32 может быть использован (хорошая реализация уже существует на Сайт Ламмерта Биса). Но нет реальной причины отдавать предпочтение тому, что связано с общей функцией хеширования, которую вы связали ...

Serge Ballesta 12.10.2018 10:56

Он еще не хеширован, поэтому отсекать 4 байта нецелесообразно. Вот старый аналогичный вопрос с указанием исходного уникального формата идентификатора: stackoverflow.com/questions/20082130/…

Tibbe 12.10.2018 10:58

А что насчет CRC-32?

dbush 12.10.2018 16:46

Думаю, здесь вы просите волшебства.

Stargateur 12.10.2018 16:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
502
0

Другие вопросы по теме