В последнее время у меня была похожая проблема, и я сделал следующее. Сначала я получил некоторые уникальные значения идентификации системы:
GetVolumeInformation для серийного номера жесткого диска
GetComputerName (это, конечно, не уникально, но наша система использовала имена компьютеров для идентификации клиентов в локальной сети, так что это было хорошо для меня)
__ cpuid (и, в частности, поле серийного номера процессора PSN)
GetAdaptersInfo для MAC-адресов
Я взял эти значения и скомбинировал их произвольным, но детерминированным способом (читайте обновление ниже!) (добавление, ксоринг, деление и сохранение остатка и т. Д.). Перебирайте значения, как если бы они были строками, и проявляйте творческий подход. В конце вы получите байтовый литерал, который можно преобразовать в диапазон букв и цифр ASCII, чтобы получить уникальный, «читаемый» код, который не выглядит как шум.
Другой подход может состоять в том, чтобы просто объединить эти значения и затем "покрыть их", добавив к ним что-то ксерокопирующее (и, возможно, снова преобразовать в буквы).
Я говорю, что он уникален, потому что по крайней мере один из входов должен быть уникальным (MAC-адрес). Конечно, вам нужно некоторое понимание теории чисел, чтобы не упустить эту уникальность, но в любом случае она должна быть достаточно хорошей.
Важное обновление : С этого поста я узнал несколько вещей о криптографии, и я считаю, что составление произвольной комбинации (по сути, вашего собственного хэша) почти наверняка плохая идея. Хеш-функции, используемые на практике, построены так, чтобы быть хорошо управляемыми (как при низкой вероятности коллизий) и их было трудно сломать (способность создавать значение, которое имеет то же значение хеш-функции, что и другое). Построение такой функции - очень сложная проблема для информатики, и если вы не квалифицированы, вы не должны пытаться. Правильный подход для этого состоит в том, чтобы объединить любую информацию об оборудовании, которую вы можете собрать (т. Е. Те, что я перечислил в посте) и использовать криптографический хеш или цифровую подпись для получения проверяемого и безопасного вывода. Не используйте криптографические алгоритмы сами Есть много ошибок уязвимости, которые требуют много знаний, чтобы избежать. Используйте хорошо известную и проверенную библиотеку для реализации алгоритмов.