Создание идентификатора, уникально для конкретного компьютера [дубликат

StackOverflow https://stackoverflow.com/questions/3644722

Вопрос

Возможный дубликат:
Надежный способ генерации уникального аппаратного удостоверения личности

Пытаюсь генерировать идентификатор, который будет уникальным для определенного компьютера. Идентификатор не будет сгенерирован случайным образом. Он будет расчетным, таким образом, чтобы идентификатор, создаваемый для компьютера A, будет фиксирован и уникальным для компьютера A. Каждый раз, когда программа выполняется на компьютере A, она будет продолжать генерировать тот же идентификатор и при выполнении на другом компьютере, он будет генерировать другой идентификатор, уникальный для этого компьютера. Это необходимо для того, чтобы два компьютера не было того же идентификатора.

Моя проблема: Для моей программы сможет сгенерировать идентификатор, уникальный для компьютера, ему необходимо выполнить расчет на основе семян, уникальных для компьютера, выполняющего его.

Мой вопрос: Как я могу получить значение, уникальную для компьютера, чтобы я мог использовать значение в качестве семени в программе генерации ID?

Можно ли получить значение из аппаратного обеспечения компьютера (например, материнской платы), которая уникальна для этого компьютера? Таким образом, ценность, скорее всего, не изменяется до тех пор, пока материнская плата компьютера не заменена.

Это было полезно?

Решение

MAC-адрес? Вот (для практических целей) уникальный для каждого нида Таким образом, он гарантирует воспроизводимость, даже если пользователь является двойной загрузкой. Конечно, есть редкие случаи торговых карт людей, но в сочетании с другими метриками (Не только используйте это, так как сетевые карты могут быть изменены), все еще возможно.

Как бы вы получили это?

public static byte[] getMACAddress() throws SocketException, UnknownHostException {
    InetAddress address = InetAddress.getLocalHost();
    NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);

    return networkInterface.getHardwareAddress();
}

Если вы хотите строковое представление, сделайте это

for (int byteIndex = 0; byteIndex < macAddress.length; byteIndex++) {
    System.out.format("%02X%s", macAddress[byteIndex], (byteIndex < macAddress.length - 1) ? "-" : "");
}

(благодаря http://www.kodejava.org/example/250.html.)

Примечание: Как уже упоминалось в комментариях, MAC-адреса могут быть подделены. Но вы говорите о небольшой части населения, и если вы не используете это для антипиратства, его уникальные.

Другие советы

Win32 генерирует компьютер SID, который должен быть уникальным для каждой установки, которую вы можете получить через WMI или Active Directory, но это красивая платформа. Вы также можете использовать MAC-адрес, так как все остальные упомянули, просто убедитесь, что это физический сетевой адаптер, так как виртуальные адаптеры имеют тенденцию делиться одним и тем же MAC-адресом через компьютеры.

Тем не менее, UUID (или GUID) составляют 128 битных номеров, которые должны быть гарантированы уникальными, и фактически были созданы с целью решения проблемы создания уникальных идентификаторов на нескольких случайных машинах. По словам Википедии:

Чтобы поставить эти цифры в перспективу, ежегодный риск попадания метеорита, считается один шанс в 17 миллиардам, [25], что означает, что вероятность составляет около 0,00000000006 (6 × 10-11), что эквивалентно шансы на создание Несколько десятков триллионов UUID в год и имеют один дубликат. Другими словами, только после генерирования 1 миллиарда УУИД каждую секунду в течение следующих 100 лет вероятность создания всего одного дубликата составит около 50%. Вероятность одного дубликата составит около 50%, если каждый человек на земле принадлежит 600 миллионов UUID.

Общее количество возможных комбинаций составляет 2 ^ 128 (или 3 х 10 ^ 38), поэтому я склонен верить в это. Кроме того, большинство современных генераторов UUID больше не используют алгоритм V1 (т. Е. Один на основе MAC-адреса), поскольку это считается проблемой безопасности из-за того, что можно сказать, когда GUID был сгенерирован, а кто сгенерировал его Отказ В мире Win32 Patch Security Circe Win2k или NT 4 изменил, чтобы использовать версию V4 Algorithm, которая основана на псевдослучайном номере вместо Mac, и JVM всегда использовал версию V3 / V4.

Редактировать: метод, используемый для генерации UUID в Java, является классом java.util.uuid.

Простой способ сделать это - прочитать аппаратное оборудование Ethernet или адрес «MAC».

http://download.orcle.com/javase/6/docs/api/java/net/networkinterface.html#gethardwareaddress ()

MAC-адреса не так уникальны, как думают люди, так как они повторно используются с течением времени. Но шансы одного приложения или сети, имеющие две идентичные, довольно низкие.

MAC-адрес достаточно уникален для того, что вы. Видеть http://en.wikipedia.org/wiki/mac_address.

Вы не уточняли, какой язык вы используете. На некоторых языках может легче, чем другие. Вот как это сделать в Java http://www.kodejava.org/example/250.html.. Отказ Google вокруг для вашего языка.

Ваш лучший вариант - основывать идентификатор на MAC-адресе первичного сетевого адаптера.

Это, вероятно, может измениться в какой-точке, но и любой жесткий компонент.

FYI GUIDS рассчитывается с использованием MAC-адреса.

Вы можете получить доступ к любой информации, описанной в этой статье? Только для Windows

http://msdn.microsoft.com/en-us/library/aaa394587.aspx.

Серийный номер, тег актива

Другой вариант IFF, который вы используете чипсы Intel, является серийный номер процессора, предполагающий, что вы можете убедиться, что функция включена. Видеть Intel Serial # Note для получения дополнительной информации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top