Как создать уникальный хэш?

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

6
задан 24 July 2011 в 16:52

12 ответов

Самое простое решение, о котором я мог подумать, это:

sudo dmidecode -s system-uuid

Согласно странице руководства dmidecode, эти данные извлекаются из интерфейса управления рабочим столом, который имеет какое-то отношение к BIOS. Это невозможно изменить.

Я проверил эту команду на двух машинах с одним и тем же оборудованием, и результат отличается от ожидаемого от имени system-uuid, поэтому он может быть использован как уникальный аппаратный хеш.

3
ответ дан 25 July 2018 в 21:33
  • 1
    Это может быть так же шатким, как MAC-адреса сами по себе. Мой системный UUID - 00000000-0000-0000-0000-6CF04954AAAA (много нулей, за которыми следует мой MAC-адрес). Я уверен, что некоторые производители делают это лучше, но Gigabyte кажутся иногда идиотами. Если бы они сделали это для всех своих материнских плат, есть только ~ 17 миллионов комбинаций, и я могу все, но гарантировать, что они сделали больше материнских плат, чем это - там будут столкновения. – Oli♦ 24 July 2011 в 17:16
  • 2
    @Oli: теперь вы упомянули об этом, в моей системе это похоже на 12345678-ABCD-0000-0000-000000000000 (MAC с последующими нулями). – Lekensteyn 24 July 2011 в 17:19
  • 3
    Вы бы не подумали генерировать 128-битное число (даже это не так, поскольку они получают первые два байта, сгенерированные для них как их производственный идентификатор) не было бы слишком тяжело ... Они могли бы даже сделать это последовательно. Не могу поверить, что такие ленивые. – Oli♦ 24 July 2011 в 17:23
  • 4
    Для тех, кто задается вопросом: изменение MAC-адреса не влияет на system-uuid. – Lekensteyn 24 July 2011 в 17:23
  • 5
    @ Oli Я сделал, но это можно изменить. Случайность не является уникальным аппаратным хешем. – Lekensteyn 24 July 2011 в 17:26

Вы можете использовать MAC-адрес eth0 (при условии, что это существует на каждой машине). Вы можете получить это самостоятельно (может быть, проще) с этим:

ifconfig eth0 | grep HWaddr | awk '{ print $NF}' | sed 's/://g'

Это даст вам что-то вроде 6cf04954aaaa.

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

В противном случае вы можете создать свою собственную уникальную строку и сохранить ее в /etc/computer-id (или другой путь по вашему выбору).

uuidgen -r

Сгенерирует как можно более случайное, например: 52a85807-35fe-409e-8983-87eb58c02ece

uuidgen -t

Использует время и eth0, чтобы сделать что-то вроде: eb8280dc-b5ec-11e0-90dd-6cf04954aaaa

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

4
ответ дан 25 July 2018 в 21:33
  • 1
    Хотя в случае случайно генерируемого UUID вероятность столкновения настолько мала, что она никогда не произойдет в обозримом времени жизни юниверса (кроме основных ошибок в реализации случайного числа). – user 24 July 2011 в 18:03
  • 2
    @OrbWeaver Ну, это дело в случайном ... Это не последовательное. Столкновение могло произойти через сто лет, но это может произойти в следующем запуске. – Oli♦ 24 July 2011 в 19:25
  • 3
    Да, он мог бы , но вероятность настолько низкая, что она фактически равна нулю для всех практических целей. Весь смысл использования UUID заключается в том, что они могут генерироваться без центрального авторитетного списка; если вы собираетесь использовать это в любом случае, вы могли бы просто распределить числа последовательно от 1. Независимо от того, имеет ли это какое-либо значение, хотя оно зависит от требований апеллянта: он может захотеть, чтобы хэш детерминированно основывался на аппаратном обеспечении, а не произвольно генерировался. – user 24 July 2011 в 21:52

Самое простое решение, о котором я мог подумать, это:

sudo dmidecode -s system-uuid

Согласно странице руководства dmidecode, эти данные извлекаются из интерфейса управления рабочим столом, который имеет какое-то отношение к BIOS. Это невозможно изменить.

Я проверил эту команду на двух машинах с одним и тем же оборудованием, и результат отличается от ожидаемого от имени system-uuid, поэтому он может быть использован как уникальный аппаратный хеш.

3
ответ дан 31 July 2018 в 12:21
  • 1
    Это может быть так же шатким, как MAC-адреса сами по себе. Мой системный UUID - 00000000-0000-0000-0000-6CF04954AAAA (много нулей, за которыми следует мой MAC-адрес). Я уверен, что некоторые производители делают это лучше, но Gigabyte кажутся иногда идиотами. Если бы они сделали это для всех своих материнских плат, есть только ~ 17 миллионов комбинаций, и я могу все, но гарантировать, что они сделали больше материнских плат, чем это - там будут столкновения. – Oli♦ 24 July 2011 в 17:16
  • 2
    @Oli: теперь вы упомянули об этом, в моей системе это похоже на 12345678-ABCD-0000-0000-000000000000 (MAC с последующими нулями). – Lekensteyn 24 July 2011 в 17:19
  • 3
    Вы бы не подумали генерировать 128-битное число (даже это не так, поскольку они получают первые два байта, сгенерированные для них как их производственный идентификатор) не было бы слишком тяжело ... Они могли бы даже сделать это последовательно. Не могу поверить, что такие ленивые. – Oli♦ 24 July 2011 в 17:23
  • 4
    Для тех, кто задается вопросом: изменение MAC-адреса не влияет на system-uuid. – Lekensteyn 24 July 2011 в 17:23
  • 5
    @ Oli Я сделал, но это можно изменить. Случайность не является уникальным аппаратным хешем. – Lekensteyn 24 July 2011 в 17:26

Вы можете использовать MAC-адрес eth0 (при условии, что это существует на каждой машине). Вы можете получить это самостоятельно (может быть, проще) с этим:

ifconfig eth0 | grep HWaddr | awk '{ print $NF}' | sed 's/://g'

Это даст вам что-то вроде 6cf04954aaaa.

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

В противном случае вы можете создать свою собственную уникальную строку и сохранить ее в /etc/computer-id (или другой путь по вашему выбору).

uuidgen -r

Сгенерирует как можно более случайное, например: 52a85807-35fe-409e-8983-87eb58c02ece

uuidgen -t

Использует время и eth0, чтобы сделать что-то вроде: eb8280dc-b5ec-11e0-90dd-6cf04954aaaa

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

4
ответ дан 31 July 2018 в 12:21
  • 1
    Хотя в случае случайно генерируемого UUID вероятность столкновения настолько мала, что она никогда не произойдет в обозримом времени жизни юниверса (кроме основных ошибок в реализации случайного числа). – user 24 July 2011 в 18:03
  • 2
    @OrbWeaver Ну, это дело в случайном ... Это не последовательное. Столкновение могло произойти через сто лет, но это может произойти в следующем запуске. – Oli♦ 24 July 2011 в 19:25
  • 3
    Да, он мог бы , но вероятность настолько низкая, что она фактически равна нулю для всех практических целей. Весь смысл использования UUID заключается в том, что они могут генерироваться без центрального авторитетного списка; если вы собираетесь использовать это в любом случае, вы могли бы просто распределить числа последовательно от 1. Независимо от того, имеет ли это какое-либо значение, хотя оно зависит от требований апеллянта: он может захотеть, чтобы хэш детерминированно основывался на аппаратном обеспечении, а не произвольно генерировался. – user 24 July 2011 в 21:52

Самое простое решение, о котором я мог подумать, это:

sudo dmidecode -s system-uuid

Согласно странице руководства dmidecode, эти данные извлекаются из интерфейса управления рабочим столом, который имеет какое-то отношение к BIOS. Это невозможно изменить.

Я проверил эту команду на двух машинах с одним и тем же оборудованием, и результат отличается от ожидаемого от имени system-uuid, поэтому он может быть использован как уникальный аппаратный хеш.

3
ответ дан 2 August 2018 в 03:10
  • 1
    Это может быть так же шатким, как MAC-адреса сами по себе. Мой системный UUID - 00000000-0000-0000-0000-6CF04954AAAA (много нулей, за которыми следует мой MAC-адрес). Я уверен, что некоторые производители делают это лучше, но Gigabyte кажутся иногда идиотами. Если бы они сделали это для всех своих материнских плат, есть только ~ 17 миллионов комбинаций, и я могу все, но гарантировать, что они сделали больше материнских плат, чем это - там будут столкновения. – Oli♦ 24 July 2011 в 17:16
  • 2
    @Oli: теперь вы упомянули об этом, в моей системе это похоже на 12345678-ABCD-0000-0000-000000000000 (MAC с последующими нулями). – Lekensteyn 24 July 2011 в 17:19
  • 3
    Вы бы не подумали генерировать 128-битное число (даже это не так, поскольку они получают первые два байта, сгенерированные для них как их производственный идентификатор) не было бы слишком тяжело ... Они могли бы даже сделать это последовательно. Не могу поверить, что такие ленивые. – Oli♦ 24 July 2011 в 17:23
  • 4
    Для тех, кто задается вопросом: изменение MAC-адреса не влияет на system-uuid. – Lekensteyn 24 July 2011 в 17:23
  • 5
    @ Oli Я сделал, но это можно изменить. Случайность не является уникальным аппаратным хешем. – Lekensteyn 24 July 2011 в 17:26

Вы можете использовать MAC-адрес eth0 (при условии, что это существует на каждой машине). Вы можете получить это самостоятельно (может быть, проще) с этим:

ifconfig eth0 | grep HWaddr | awk '{ print $NF}' | sed 's/://g'

Это даст вам что-то вроде 6cf04954aaaa.

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

В противном случае вы можете создать свою собственную уникальную строку и сохранить ее в /etc/computer-id (или другой путь по вашему выбору).

uuidgen -r

Сгенерирует как можно более случайное, например: 52a85807-35fe-409e-8983-87eb58c02ece

uuidgen -t

Использует время и eth0, чтобы сделать что-то вроде: eb8280dc-b5ec-11e0-90dd-6cf04954aaaa

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

4
ответ дан 2 August 2018 в 03:10
  • 1
    Хотя в случае случайно генерируемого UUID вероятность столкновения настолько мала, что она никогда не произойдет в обозримом времени жизни юниверса (кроме основных ошибок в реализации случайного числа). – user 24 July 2011 в 18:03
  • 2
    @OrbWeaver Ну, это дело в случайном ... Это не последовательное. Столкновение могло произойти через сто лет, но это может произойти в следующем запуске. – Oli♦ 24 July 2011 в 19:25
  • 3
    Да, он мог бы , но вероятность настолько низкая, что она фактически равна нулю для всех практических целей. Весь смысл использования UUID заключается в том, что они могут генерироваться без центрального авторитетного списка; если вы собираетесь использовать это в любом случае, вы могли бы просто распределить числа последовательно от 1. Независимо от того, имеет ли это какое-либо значение, хотя оно зависит от требований апеллянта: он может захотеть, чтобы хэш детерминированно основывался на аппаратном обеспечении, а не произвольно генерировался. – user 24 July 2011 в 21:52

Самое простое решение, о котором я мог подумать, это:

sudo dmidecode -s system-uuid

Согласно странице руководства dmidecode, эти данные извлекаются из интерфейса управления рабочим столом, который имеет какое-то отношение к BIOS. Это невозможно изменить.

Я проверил эту команду на двух машинах с одним и тем же оборудованием, и результат отличается от ожидаемого от имени system-uuid, поэтому он может быть использован как уникальный аппаратный хеш.

3
ответ дан 4 August 2018 в 19:03
  • 1
    Это может быть так же шатким, как MAC-адреса сами по себе. Мой системный UUID - 00000000-0000-0000-0000-6CF04954AAAA (много нулей, за которыми следует мой MAC-адрес). Я уверен, что некоторые производители делают это лучше, но Gigabyte кажутся иногда идиотами. Если бы они сделали это для всех своих материнских плат, есть только ~ 17 миллионов комбинаций, и я могу все, но гарантировать, что они сделали больше материнских плат, чем это - там будут столкновения. – Oli♦ 24 July 2011 в 17:16
  • 2
    @Oli: теперь вы упомянули об этом, в моей системе это похоже на 12345678-ABCD-0000-0000-000000000000 (MAC с последующими нулями). – Lekensteyn 24 July 2011 в 17:19
  • 3
    Вы бы не подумали генерировать 128-битное число (даже это не так, поскольку они получают первые два байта, сгенерированные для них как их производственный идентификатор) не было бы слишком тяжело ... Они могли бы даже сделать это последовательно. Не могу поверить, что такие ленивые. – Oli♦ 24 July 2011 в 17:23
  • 4
    Для тех, кто задается вопросом: изменение MAC-адреса не влияет на system-uuid. – Lekensteyn 24 July 2011 в 17:23
  • 5
    @ Oli Я сделал, но это можно изменить. Случайность не является уникальным аппаратным хешем. – Lekensteyn 24 July 2011 в 17:26

Вы можете использовать MAC-адрес eth0 (при условии, что это существует на каждой машине). Вы можете получить это самостоятельно (может быть, проще) с этим:

ifconfig eth0 | grep HWaddr | awk '{ print $NF}' | sed 's/://g'

Это даст вам что-то вроде 6cf04954aaaa.

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

В противном случае вы можете создать свою собственную уникальную строку и сохранить ее в /etc/computer-id (или другой путь по вашему выбору).

uuidgen -r

Сгенерирует как можно более случайное, например: 52a85807-35fe-409e-8983-87eb58c02ece

uuidgen -t

Использует время и eth0, чтобы сделать что-то вроде: eb8280dc-b5ec-11e0-90dd-6cf04954aaaa

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

4
ответ дан 4 August 2018 в 19:03
  • 1
    Хотя в случае случайно генерируемого UUID вероятность столкновения настолько мала, что она никогда не произойдет в обозримом времени жизни юниверса (кроме основных ошибок в реализации случайного числа). – user 24 July 2011 в 18:03
  • 2
    @OrbWeaver Ну, это дело в случайном ... Это не последовательное. Столкновение могло произойти через сто лет, но это может произойти в следующем запуске. – Oli♦ 24 July 2011 в 19:25
  • 3
    Да, он мог бы , но вероятность настолько низкая, что она фактически равна нулю для всех практических целей. Весь смысл использования UUID заключается в том, что они могут генерироваться без центрального авторитетного списка; если вы собираетесь использовать это в любом случае, вы могли бы просто распределить числа последовательно от 1. Независимо от того, имеет ли это какое-либо значение, хотя оно зависит от требований апеллянта: он может захотеть, чтобы хэш детерминированно основывался на аппаратном обеспечении, а не произвольно генерировался. – user 24 July 2011 в 21:52

Самое простое решение, о котором я мог подумать, это:

sudo dmidecode -s system-uuid

Согласно странице руководства dmidecode, эти данные извлекаются из интерфейса управления рабочим столом, который имеет какое-то отношение к BIOS. Это невозможно изменить.

Я проверил эту команду на двух машинах с одним и тем же оборудованием, и результат отличается от ожидаемого от имени system-uuid, поэтому он может быть использован как уникальный аппаратный хеш.

3
ответ дан 6 August 2018 в 03:22
  • 1
    Это может быть так же шатким, как MAC-адреса сами по себе. Мой системный UUID - 00000000-0000-0000-0000-6CF04954AAAA (много нулей, за которыми следует мой MAC-адрес). Я уверен, что некоторые производители делают это лучше, но Gigabyte кажутся иногда идиотами. Если бы они сделали это для всех своих материнских плат, есть только ~ 17 миллионов комбинаций, и я могу все, но гарантировать, что они сделали больше материнских плат, чем это - там будут столкновения. – Oli♦ 24 July 2011 в 17:16
  • 2
    @Oli: теперь вы упомянули об этом, в моей системе это похоже на 12345678-ABCD-0000-0000-000000000000 (MAC с последующими нулями). – Lekensteyn 24 July 2011 в 17:19
  • 3
    Вы бы не подумали генерировать 128-битное число (даже это не так, поскольку они получают первые два байта, сгенерированные для них как их производственный идентификатор) не было бы слишком тяжело ... Они могли бы даже сделать это последовательно. Не могу поверить, что такие ленивые. – Oli♦ 24 July 2011 в 17:23
  • 4
    Для тех, кто задается вопросом: изменение MAC-адреса не влияет на system-uuid. – Lekensteyn 24 July 2011 в 17:23
  • 5
    @ Oli Я сделал, но это можно изменить. Случайность не является уникальным аппаратным хешем. – Lekensteyn 24 July 2011 в 17:26

Вы можете использовать MAC-адрес eth0 (при условии, что это существует на каждой машине). Вы можете получить это самостоятельно (может быть, проще) с этим:

ifconfig eth0 | grep HWaddr | awk '{ print $NF}' | sed 's/://g'

Это даст вам что-то вроде 6cf04954aaaa.

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

В противном случае вы можете создать свою собственную уникальную строку и сохранить ее в /etc/computer-id (или другой путь по вашему выбору).

uuidgen -r

Сгенерирует как можно более случайное, например: 52a85807-35fe-409e-8983-87eb58c02ece

uuidgen -t

Использует время и eth0, чтобы сделать что-то вроде: eb8280dc-b5ec-11e0-90dd-6cf04954aaaa

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

4
ответ дан 6 August 2018 в 03:22
  • 1
    Хотя в случае случайно генерируемого UUID вероятность столкновения настолько мала, что она никогда не произойдет в обозримом времени жизни юниверса (кроме основных ошибок в реализации случайного числа). – user 24 July 2011 в 18:03
  • 2
    @OrbWeaver Ну, это дело в случайном ... Это не последовательное. Столкновение могло произойти через сто лет, но это может произойти в следующем запуске. – Oli♦ 24 July 2011 в 19:25
  • 3
    Да, он мог бы , но вероятность настолько низкая, что она фактически равна нулю для всех практических целей. Весь смысл использования UUID заключается в том, что они могут генерироваться без центрального авторитетного списка; если вы собираетесь использовать это в любом случае, вы могли бы просто распределить числа последовательно от 1. Независимо от того, имеет ли это какое-либо значение, хотя оно зависит от требований апеллянта: он может захотеть, чтобы хэш детерминированно основывался на аппаратном обеспечении, а не произвольно генерировался. – user 24 July 2011 в 21:52

Самое простое решение, о котором я мог подумать, это:

sudo dmidecode -s system-uuid

Согласно странице руководства dmidecode, эти данные извлекаются из интерфейса управления рабочим столом, который имеет какое-то отношение к BIOS. Это невозможно изменить.

Я проверил эту команду на двух машинах с одним и тем же оборудованием, и результат отличается от ожидаемого от имени system-uuid, поэтому он может быть использован как уникальный аппаратный хеш.

3
ответ дан 7 August 2018 в 21:08
  • 1
    Это может быть так же шатким, как MAC-адреса сами по себе. Мой системный UUID - 00000000-0000-0000-0000-6CF04954AAAA (много нулей, за которыми следует мой MAC-адрес). Я уверен, что некоторые производители делают это лучше, но Gigabyte кажутся иногда идиотами. Если бы они сделали это для всех своих материнских плат, есть только ~ 17 миллионов комбинаций, и я могу все, но гарантировать, что они сделали больше материнских плат, чем это - там будут столкновения. – Oli♦ 24 July 2011 в 17:16
  • 2
    @Oli: теперь вы упомянули об этом, в моей системе это похоже на 12345678-ABCD-0000-0000-000000000000 (MAC с последующими нулями). – Lekensteyn 24 July 2011 в 17:19
  • 3
    Вы бы не подумали генерировать 128-битное число (даже это не так, поскольку они получают первые два байта, сгенерированные для них как их производственный идентификатор) не было бы слишком тяжело ... Они могли бы даже сделать это последовательно. Не могу поверить, что такие ленивые. – Oli♦ 24 July 2011 в 17:23
  • 4
    Для тех, кто задается вопросом: изменение MAC-адреса не влияет на system-uuid. – Lekensteyn 24 July 2011 в 17:23
  • 5
    @ Oli Я сделал, но это можно изменить. Случайность не является уникальным аппаратным хешем. – Lekensteyn 24 July 2011 в 17:26

Вы можете использовать MAC-адрес eth0 (при условии, что это существует на каждой машине). Вы можете получить это самостоятельно (может быть, проще) с этим:

ifconfig eth0 | grep HWaddr | awk '{ print $NF}' | sed 's/://g'

Это даст вам что-то вроде 6cf04954aaaa.

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

В противном случае вы можете создать свою собственную уникальную строку и сохранить ее в /etc/computer-id (или другой путь по вашему выбору).

uuidgen -r

Сгенерирует как можно более случайное, например: 52a85807-35fe-409e-8983-87eb58c02ece

uuidgen -t

Использует время и eth0, чтобы сделать что-то вроде: eb8280dc-b5ec-11e0-90dd-6cf04954aaaa

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

4
ответ дан 7 August 2018 в 21:08
  • 1
    Хотя в случае случайно генерируемого UUID вероятность столкновения настолько мала, что она никогда не произойдет в обозримом времени жизни юниверса (кроме основных ошибок в реализации случайного числа). – user 24 July 2011 в 18:03
  • 2
    @OrbWeaver Ну, это дело в случайном ... Это не последовательное. Столкновение могло произойти через сто лет, но это может произойти в следующем запуске. – Oli♦ 24 July 2011 в 19:25
  • 3
    Да, он мог бы , но вероятность настолько низкая, что она фактически равна нулю для всех практических целей. Весь смысл использования UUID заключается в том, что они могут генерироваться без центрального авторитетного списка; если вы собираетесь использовать это в любом случае, вы могли бы просто распределить числа последовательно от 1. Независимо от того, имеет ли это какое-либо значение, хотя оно зависит от требований апеллянта: он может захотеть, чтобы хэш детерминированно основывался на аппаратном обеспечении, а не произвольно генерировался. – user 24 July 2011 в 21:52

Другие вопросы по тегам:

Похожие вопросы: