альтернатива серийной плате для уникального идентификатора?

283
Arya

Мне нужно использовать уникальный идентификатор для идентификации ПК даже после перезагрузки ОС. Проведя некоторые исследования по поиску лучшего уникального идентификатора, я выбрал серийный номер материнской платы. Но на моей машине он возвращает ноль для серийного номера. Есть ли другой уникальный идентификатор, который я могу использовать, кроме MAC-адреса?

PS C:\Users\user\Desktop> wmic baseboard get product,Manufacturer,version,serialnumber Manufacturer Product SerialNumber Version LENOVO LENOVO NONE NONE 
0

2 ответа на вопрос

1
harrymc

Я предлагаю взглянуть на статью Code Project «
Создание уникального ключа (отпечаток пальца) для компьютера для целей лицензирования» .

Там вы найдете код на C #, который, в свою очередь, был найден автором и который он сам использует для своих нужд лицензирования.

Автор перечисляет эти очень разумные моменты:

  • Генерируйте ключ только из материнской платы, процессора и BIOS, поскольку пользователь обычно не меняет эти части.
  • Не используйте MAC-идентификатор, идентификатор графической карты и идентификатор диска, так как эти устройства очень часто меняются.
  • Получение идентификаторов устройств занимает значительное время. Поэтому сделайте функцию генерирования отпечатка пальца статической и сохраните ее в статической переменной, чтобы она генерировала ключ только один раз во всем приложении.

Что касается серийного номера материнской платы, возвращенного как ноль, то это другой вопрос, который заслуживает дальнейшего изучения. Возможно, что код, включенный в статью, будет работать лучше, или, возможно, процессор и диск могут работать там, где серийный номер материнской платы недоступен.

Я отмечаю, что вам не нужна функция, которая использует данные, которые доступны повсеместно, поскольку различное оборудование может иметь не все желаемые серийные номера. Все, что вам нужно, это объединить данные из нескольких источников, пропуская те, которые недоступны, просто будучи достаточно уверенным, что итоговая строка отпечатков пальцев из доступных будет довольно уникальной.

Извините, ваш ответ появился, когда я писал и проверял свой. Может быть, вы знаете, является ли UUID хорошим решением. AFH 6 лет назад 0
@AFH: UUID обычно довольно уникален, если только не генерируется самостоятельно, но UUID чего? harrymc 6 лет назад 0
Он включен в системную информацию вместе с серийным номером _system_ (который не определен ни на одном из моих ноутбуков). AFH 6 лет назад 0
@AFH: я не знаю, но это может быть альтернативой, где это можно найти. Плакат не нуждается в последовательной функции, которая использует универсально доступные сериалы, просто в функции, которая будет отпечаток пальца данного компьютера. harrymc 6 лет назад 0
Значение возвращается с помощью `wmic csproduct get uuid`, согласно [этой ссылке] (https://www.nextofwindows.com/how-to-find-out-bios-motherboard-and-cpu-info-from-command -линия). Если это вообще реализовано, то это более простое решение, чем создание и сохранение составного идентификатора. AFH 6 лет назад 1
@AFH: Это похоже на BIOS, и я бы не стал делать ставку на то, что он будет доступен повсеместно или не будет изменен после обновления BIOS или идентификации чего-либо, кроме этой версии BIOS. Я думаю, что автор должен создать отпечаток пальца путем объединения значений из списка, просто пропуская те, которые не работают. harrymc 6 лет назад 0
Почему бы просто не создать собственный UUID? Jamie Hanrahan 6 лет назад 0
0
AFH

Серийный номер материнской платы является хорошим идентификатором, но не все производители кодируют его в прошивке .

MAC-адрес в порядке, но какой? Для повышения производительности ноутбук может быть подключен через Ethernet, встроенный WiFi или USB WiFi.

Существует системный UUID, который по определению уникален, но я не уверен, универсально ли он реализован.