Я пытаюсь создать функцию, которая принимает произвольную строку в качестве входных данных и создает GUID на основе этой строки. Формат GUID должен быть в идеале GUID
структура из objbase.h
, но это не так важно. Важно то, что функция является детерминированной, но всегда (или достаточно близко, чтобы всегда) создает разные GUID для разных строк.
Какой алгоритм я могу использовать для этого? Я думал о битовых операциях с содержимым строки, но я был бы признателен за некоторые указания.
Как насчет вычисления MD5-хеша строки и обработки его, как если бы это был GUID? Идентификаторы GUID и MD5 являются 128-битными значениями.
Вы можете хешировать строку, а затем использовать первые 16 байтов хеша для создания GUID (http://msdn.microsoft.com/en-us/library/90ck37x3.aspx)
Проверьте спецификации для UUID версии 3 и 5:
По сути, вы вычисляете MD5 (или SHA-1) вашей строки и дословно сохраняете результаты в 128-битном UUID. Для SHA-1 вам нужно усечь результат, так как SHA-1 возвращает 160 бит.