Я предлагаю взглянуть на статью Code Project
Генерация уникального ключа (отпечатков пальцев) для компьютера для целей лицензирования.
Вы найдете там код на C #, который в свою очередь был найден автором и который он сам использует для своих нужд лицензирования.
Автор перечисляет эти очень разумные моменты:
- Генерируйте ключ только из материнской платы, процессора и BIOS, поскольку пользователь обычно не меняет эти части.
- Не используйте MAC-идентификатор, идентификатор графической карты и идентификатор диска, так как эти устройства очень часто меняются.
- Получение идентификаторов устройств занимает значительное время. Поэтому сделайте функцию генерирования отпечатка пальца статической и сохраните ее в статической переменной, чтобы она генерировала ключ только один раз во всем приложении.
Что касается серийного номера материнской платы, возвращенного как ноль, то это другой вопрос, который заслуживает дальнейшего изучения.
Возможно, что код, включенный в статью, будет работать лучше, или, возможно, процессор и диск могут работать там, где серийный номер материнской платы недоступен.
Я отмечаю, что вам не нужна функция, которая использует данные, которые доступны повсеместно, поскольку на другом оборудовании могут быть не все желаемые серийные номера. Все, что вам нужно, это объединить данные из нескольких источников, пропуская те, которые недоступны, просто будучи достаточно уверенным, что итоговая строка отпечатков пальцев из доступных будет довольно уникальной.