C++ получить идентификатор процессора

этот поток в порядке. Как получить идентификатор процессора и материнской платы?

Я хотел получить идентификатор процессора, используя код C++, не используя WMI или любой сторонний lib.

или что-нибудь на компьютере, который оказывается уникальным. Одно дело Ethernet ID, но который снова съемный на некоторых машинах. Это я хочу использовать в основном для целей лицензирования.

является ли идентификатор процессора уникальным и доступным на всех основных процессорах?

3 ответов


У меня была аналогичная проблема в последнее время, и я сделал следующее. Сначала я получил некоторые уникальные значения идентификации системы:

  • GetVolumeInformation для серийного номера HDD

  • GetComputerName (это, конечно, не уникально, но наша система использовала имена компьютеров для идентификации клиентов в локальной сети, поэтому это было хорошо для me)

  • _ _ cpuid (и, в частности, поле серийного номера PSN - процессора)

  • GetAdaptersInfo для MAC-адресов

Я взял эти значения и объединил их произвольным, но детерминированным способом(обновление читайте ниже!) (добавление, xoring, разделять и держать остаток etc.). Перебирать значения, как если бы они были струны и быть творческим. В конце концов, вы получите байтовый литерал, который вы можете преобразовать в диапазон ASCII букв и цифр, чтобы получить уникальный "читаемый" код, который не выглядит как шум.

другой подход может быть просто конкатенацией этих значений, а затем "скрыть их" с помощью xoring что-то над ними (и, возможно, снова преобразуется в буквы).

Я говорю, что это уникально, потому что по крайней мере один из входов должен быть уникальным (MAC-адрес). Из конечно, вам нужно некоторое понимание теории чисел, чтобы не сдуть эту уникальность, но это должно быть достаточно хорошо в любом случае.

важные обновления: С этого поста я узнал несколько вещей о криптографии, и я придерживаюсь мнения, что составление произвольной комбинации (по сути, ваш собственный хэш) почти наверняка плохая идея. Хеш-функции, используемые на практике, построены так, чтобы быть хорошо себя вести (как при низкой вероятности столкновений) и быть трудно сломать (способность создайте значение, которое имеет то же хэш-значение, что и другое). Построение такой функции-очень сложная проблема, информатики и, если вы квалифицированы, вы не должны пытаться. Правильный подход для этого-объединить любую информацию, которую вы можете собрать об оборудовании (т. е. те, которые я перечислил в post), и использовать криптографический хэш или цифровую подпись для получения поддающегося проверке и безопасного вывода. Не реализуйте криптографические алгоритмы самостоятельно; есть много уязвимость подводные камни, которые требуют много знаний, чтобы избежать. Для реализации алгоритмов используйте известную и надежную библиотеку.


Если вы используете Visual Studio, Microsoft предоставляет __cpuid instrinsic в <intrin.h> заголовок. Пример на связанном сайте msdn.


тю...

существуют специальные библиотеки для создания уникального идентификатора на основе установленного оборудования (поэтому для указанного компьютера этот идентификатор всегда будет одинаковым). Большинство из них берет ID материнской платы + HDD ID + CPU ID и смешивает эти значения.

Whe изобрести колесо? Почему бы не использовать эти библиотеки? Каких-то серьезных причин?