Generación de identificación único para un equipo determinado [duplicado]
-
01-10-2019 - |
Pregunta
Duplicar posibles:
de generar ID de hardware único
Am tratando de generar un identificador que será único para un equipo determinado. El ID no se genera aleatoriamente. Se basará cálculo, de tal manera que el ID generado por ordenador A será fijo y única para el sistema A. Cada vez que el programa se ejecuta en el equipo A, continuará para generar el mismo ID y cuando se ejecuta en otro equipo, que va a generar otro identificador único a ese equipo. Esto es para asegurar que los dos equipos no tienen el mismo ID.
Mi Reto:. Para mi programa sea capaz de generar un identificador único a un ordenador, que necesita para realizar el cálculo sobre la base de una semilla único en el equipo de ejecutarlo
Mi Pregunta:? ¿Cómo puedo obtener un valor único a un ordenador, de modo que pueda utilizar el valor como una semilla en el programa de generación de ID
¿Es posible obtener un valor de hardware de un ordenador (por ejemplo, la placa madre) que es único para ese equipo? De esta manera, el valor es muy probable que no cambie, siempre y cuando la placa base del ordenador no se reemplaza.
Solución
MAC? Eso es (para fines prácticos) únicas para cada NIC por lo que la reproducibilidad de garantía incluso si el usuario es dual el arranque. Seguro que hay casos raros de personas que comercian tarjetas, pero junto con otras métricas (no sólo el uso de este, ya que las tarjetas de red pueden ser cambiados), sigue siendo posible.
¿Cómo conseguirlo?
public static byte[] getMACAddress() throws SocketException, UnknownHostException {
InetAddress address = InetAddress.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);
return networkInterface.getHardwareAddress();
}
Si desea una representación de cadena, hacer esto
for (int byteIndex = 0; byteIndex < macAddress.length; byteIndex++) {
System.out.format("%02X%s", macAddress[byteIndex], (byteIndex < macAddress.length - 1) ? "-" : "");
}
http://www.kodejava.org/examples/250.html )
Nota: Como se ha mencionado en los comentarios, las direcciones MAC pueden ser falseadas. Sin embargo, su hablando de una pequeña parte de la población hacer esto, y menos que su uso de este material para la lucha contra la piratería, su único suficiente.
Otros consejos
Win32 genera un SID del equipo, que se supone que es única para cada instalación que se puede obtener a través de WMI o Active Directory, pero que es bastante específico de la plataforma. También puede utilizar la dirección MAC, como todos los demás han mencionado, sólo asegúrese de que se trata de un adaptador de red físico, como adaptadores virtuales tienden a compartir la misma dirección MAC en todos los equipos.
Sin embargo, UUID (o GUID) son 128 números de bits que se supone deben ser garantizadas único, y fueron de hecho realizadas con el propósito de resolver el problema de la generación de identificadores únicos a través de múltiples máquinas, al azar. Según Wikipedia:
Para poner estas cifras en perspectiva, riesgo anual de uno de ser golpeado por una meteorito se estima en uno oportunidad en 17 mil millones, [25] que los medios la probabilidad es de aproximadamente 0,00000000006 (6 × 10-11), equivalente a las probabilidades de la creación de unas pocas decenas de billones de UUID en un año y tener uno duplicar. En otras palabras, sólo después de la generación de 1 mil millones de UUID cada segundo para los próximos 100 años, la probabilidad de crear sólo una duplicado sería de alrededor de 50%. los probabilidad de un duplicado sería alrededor del 50% si cada persona en la tierra es propietaria de 600 millones de UUID.
El número total de posibles combinaciones es 2 ^ 128 (o 3 x 10 ^ 38), por lo que tienden a creer. Además, la mayoría de los generadores UUID modernos no utilizan el algoritmo V1 más (es decir, la que se basa fuera de la dirección MAC), ya que se considera un problema de seguridad debido al hecho de que uno puede decir cuando se generó el GUID, y quién lo generó . En el mundo de Win32, un parche de seguridad circa Win2K o NT 4 cambia para utilizar la versión V4 del algoritmo, que se basa apagado de un número pseudo-aleatorio en lugar de la MAC, y la JVM siempre ha utilizado la versión V3 / V4.
EDIT:. El método utilizado para generar UUID en Java es a través de la clase java.util.UUID
Una manera fácil de hacer esto es leer el hardware de Ethernet o dirección "MAC".
Las direcciones MAC no son tan únicos como la gente piensa, ya que se reutilizan como pasa el tiempo. Pero las probabilidades de una aplicación o la red que tienen dos iguales son bastante bajos.
El MAC es única suficiente para lo que. Ver http://en.wikipedia.org/wiki/MAC_address
No se ha especificado el idioma que se está utilizando. Fuere más fácil en algunos idiomas que otros. Aquí es cómo hacerlo en Java http://www.kodejava.org/examples/250. html . Google en torno a su idioma.
Su mejor opción es basar la identificación de la dirección MAC del adaptador de red principal.
Esto es potencialmente probable que el cambio en somepoint, pero también lo es cualquier componente duro único.
FYI GUID se calculan utilizando la dirección MAC.
Tener acceso a la información descrita en este artículo? Sólo para Windows
http://msdn.microsoft.com/en-us/library /aa394587.aspx
Número de serie, la etiqueta de propiedad
Otra opción IFF está utilizando chips de Intel es el número de serie del procesador, suponiendo que usted puede asegurar la función está activada. Ver Intel Serial # Nota para obtener más información