|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Уникальный идентификатор компьютера (Hardware ID)
Уважаемые программисты подскажите как можно составить уникальный идентификатор компьютера, точнее из чего - из ID/SerialNumber каких устройств (мат плата, процессор, жесткий диск и т.д.) можно составить уникальный идентификатор?
З.Ы. MAC-адрес не предлагать |
#2
|
|||
|
|||
А чем MAC-адрес как составная часть UID'а не годится?
Ну еще: - Family процессора - Stepping процессора - уникальный номер процессора, если есть - серийник BIOS - серийник системного тома (диска С) - серийник матери, если доступен - имена производителей железа, если сможешь вытащить. Все это собирается в строку, которую потом обрабатываешь какой-нить хэш-функцией для обезличивания и укорачивания. Последний раз редактировалось Admin, 23.04.2023 в 18:32. |
#3
|
||||
|
||||
такое подойдет:
PHP код:
результат: Цитата:
|
#4
|
|||
|
|||
Цитата:
GUID не подходит в качестве Harware ID, т.к. он меняется из раза в раз. Где-то читал что для его генерации используется время... |
#5
|
||||
|
||||
я как-то делал так (лет много-много назад): брал Windows Product ID:
Код:
function ProductID: string; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion',false); Result := Reg.ReadString('ProductId'); Reg.Free; end; Код:
function GetHardID:string; var SerialNum: dword; a, b: dword; Buffer: array [0..255] of char; begin if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), @SerialNum, a, b, nil, 0) then Result := IntToStr(SerialNum); end; Код:
function BIOSInfo(OS: string):string; var p: pointer; s: string[255]; begin if OS='NT' then begin with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; if OpenKeyReadOnly('HARDWARE\DESCRIPTION\System') then Result := ReadString('SystemBiosDate') finally Free; end; end else try s[0] := #8; p := Pointer($0FFFF5); Move(p^,s[1],8); Result := copy(s,1,2) + '/' + copy(s,4,2) + '/' +copy (s,7,2); except Result := 'XX.XX.XXXX'; end; end; Код:
BiosInfo('NT'); // для Win9x - BiosInfo(''); Код:
HardwareID := MD5(ProductID + GetHardID + BiosInfo('NT')); P.S. MD5 Unit прилагается во вложении. Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel Последний раз редактировалось Marvel, 27.06.2010 в 17:32. |
#6
|
|||
|
|||
Цитата:
MAC-адрес легко подменить и "При включении bluetooth/wi-fi появляется новая "сетевая карта". При отключенном сетевом проводе MAC-адрес не определяется." Вот нашел статейку Как получить hardware id. Исходники DiskID32 на Delphi . Раньше думал получать инфу через WMI, но после этой статьи больше склоняюсь к использованию серийного номера жесткого диска. Вопрос такой: действительно этот номер уникальный? |
#7
|
|||
|
|||
Цитата:
Спасибо за код, но у меня несколько вопросов:
Последний раз редактировалось Marx, 27.06.2010 в 17:35. |
#8
|
||||
|
||||
Marx:
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel Последний раз редактировалось Marvel, 27.06.2010 в 17:39. |
#9
|
|||
|
|||
Цитата:
Ок, буду читать номер винта. На счет последнего, даже если не подбирать Hardware ID, меняя какието параметры (номер винта, дату биоса, ProductID и т.д.), возможно ли совпадение Hardware ID на разных компах? Если да, то стоит ли использовать хеширование вообще(в данном случае)? |
#10
|
||||
|
||||
думаю совпадение может быть только в дате BIOS'а (BiosInfo) - на этот параметр лучше не надеяться. В остальном - проблематично будет подобрать (даже очень) Хеширование поможет запутать и сделать вид более похожий на серийник Windows, если в в некоторых местах поставить чёрточки
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы... ICQ: 593977748 Nick: Marvel Последний раз редактировалось Marvel, 27.06.2010 в 17:55. |
#11
|
|||
|
|||
Цитата:
Marvel, спасибо за помощь. А никто не знает какие еще устройства, кроме жесткого диска с серийным номером и сетевой платы с MAC-адресом, обладают уникальными параметрами? Т.е. не повторяющимися на других компах Последний раз редактировалось Marx, 28.06.2010 в 18:52. |