java (Серия из 2 частей)
Что такое UUID?
Идентификатор UUID (универсальный уникальный идентификатор) 是给于所有用途一个128位长的唯一值。
Общий стандарт UUID использует шестнадцатеричные октеты (шестнадцать цифр, восемь байт) в качестве числа. Он состоит из 4 символов и 4 символов “-“, а общая длина составляет 36 символов. И если все биты установлены в 0, то это нулевой UUID.
Возьмите каштан здесь: 123e4567-e89b-42d3-a456-556642440000 xxxxxxxx-xxxx-Bxxx-Xxxxxxxxxxxxxxx
A представляет переменную, определяющую расположение UUID. Все остальные биты в UUID зависят от настройки битов в поле переменной.Вариант определяется 3 наиболее важными битами:
| 0 | X | X | зарезервировано (0) |
| 1 | 0 | X | текущий вариант (2) |
| 1 | 1 | 0 | зарезервировано для корпорации Майкрософт (6) |
| 1 | 1 | 1 | зарезервировано на будущее (7) |
В UUID примера Значение A в UUID примера равно “a”.) Отобразите переменную как 2. B означает версию. Версия (значение B) в UUID примера равна 4.
Значение A в UUID примера равно “a”.) Отобразите переменную как 2. B означает версию. Версия (значение B) в UUID примера равна 4. UUID, предоставляемый Java
。举例的 идентификатор UUID 中的 в 值是 а -‘)。 将变量显示为2 Б 代表版本。 举例的 идентификатор UUID 中的版本(B的值)是4。 Ява 提供的 идентификатор UUID UUID и 布局变量为2 分别有5个版本: В1: 基于时间 (на основе времени), Версия 2: DCE安全性 В3,В5: 基于名称 (имя) В4: 随机
。举例的 идентификатор UUID 中的 в 值是 а -‘)。 将变量显示为2 Б 代表版本。 举例的 идентификатор UUID 中的版本(B的值)是4。 Ява 提供的 идентификатор UUID UUID и 布局变量为2 分别有5个版本: В1: 基于时间 (на основе времени), Версия 2: DCE安全性 В3,В5: 基于名称 (имя) В4: 随机 Ява 的 只提供了v3和v4 осуществления идентификатор UUID,但也提供了用于生成任何类型的UUID的构造函数: идентификатор UUID идентификатор UUID(mostSigBits долго, долго leastSigBits);
Значение A в UUID примера равно “a”.) Отобразите переменную как 2. B означает версию. Версия (значение B) в UUID примера равна 4. Переменные компоновки UUID, предоставляемые Java, равны 2. Существует 5 версий: v1: На основе времени, v2: Безопасность DCE, v3, v5: На основе имен, v4: Случайный. Java предоставляет реализацию UUID только для v3 и v4, но также предоставляет конструктор для генерации любого типа UUID: || UUID UUID (Lonjava также предоставляет метод для получения вариантов и версий UUID: g большинство гигабит, длинные наименьшие гигабиты);
UUID uuid = UUID.randomUUID(); int variant = uuid.variant(); int version = uuid.version();
Значение A в UUID примера равно “a”.) Отобразите переменную как 2. B означает версию. Версия (значение B) в UUID примера равна 4. Переменные компоновки UUID, предоставляемые Java, равны 2. Существует 5 версий: v1: На основе времени, v2: Безопасность DCE, v3, v5: На основе имен, v4: Случайный. Java предоставляет реализацию UUID только для v3 и v4, но также предоставляет конструктор для генерации любого типа UUID: || UUID UUID (Lonjava также предоставляет метод для получения вариантов и версий UUID: g Большинство гигабит, давайте посмотрим, как генерируются различные версии UUID. длинные, по крайней мере, гигабиты);
。举例的 идентификатор UUID 中的 в 值是 а -‘)。 将变量显示为2 Б 代表版本。 举例的 идентификатор UUID 中的版本(B的值)是4。 Ява 提供的 идентификатор UUID UUID и 布局变量为2 分别有5个版本: В1: 基于时间 (на основе времени), Версия 2: DCE安全性 В3,В5: 基于名称 (имя) В4: 随机 Ява 只提供了v3和v4 的 идентификатор UUID реализации,但也提供了用于生成任何类型的UUID的构造函数: || идентификатор UUID идентификатор UUID(lonJava 也提供了获取 идентификатор UUID 的变体和版本的方法: г mostSigBits, 接下来我们来看看不同版本的 идентификатор UUID 生成。 долго leastSigBits); 版本 3 & 5
Значение A в UUID примера равно “a”.) Отобразите переменную как 2. B означает версию. Версия (значение B) в UUID примера равна 4. Переменные компоновки UUID, предоставляемые Java, равны 2. Существует 5 версий: v1: На основе времени, v2: Безопасность DCE, v3, v5: На основе имен, v4: Случайный. Java предоставляет реализацию UUID только для v3 и v4, но также предоставляет конструктор для генерации любого типа UUID: UUID UUID (Lonjava также предоставляет метод для получения вариантов и версий UUID: g Большинство гигабит, давайте посмотрим, как генерируются различные версии UUID. Длинные минимум гигабиты); UUID версии v3 и 5 генерируется с использованием хэша пространства имен и имени. Версии 3 и 5 Идентификатором пространства имен может быть система доменных имен (DNS), идентификатор объекта (OID), URL-адрес и т.д.
Итак, вопрос в том, в чем разница между v3 и v5?Это алгоритм хеширования, v3 использует MD5 (128 бит) И v5 использует SHA-1 (160 бит).
Итак, снова возникает проблема: разве UUID не состоит всего из 128 цифр?Что делать, если SHA1 содержит 160 цифр? Короче говоря, мы усекаем хэш сгенерированного значения до 128 бит, затем заменяем 4 бита версией и 2 бита переменной.
Java обеспечивает только генерацию UUID v3. Здесь мы рассмотрим метод Java для генерации UUID v3.:
String source = namespace + name;
byte[] bytes = source.getBytes("UTF-8");
UUID uuid = UUID.nameUUIDFromBytes(bytes);
Версия 4
Генерация UUID v4 использует случайные числа в качестве источника. Java реализована с помощью SecureRandom (с использованием непредсказуемых значений в качестве начальных для генерации случайных чисел, чтобы уменьшить вероятность конфликтов) 。 Java-идентификатор UUID v4 非常简单://UUID.randomUUID();
Мы также можем использовать SHA-256 плюс случайный UUID для использования:
MessageDigest salt = MessageDigest.getInstance("SHA-256");
salt.update(UUID.randomUUID().toString().getBytes("UTF-8"));
String digest = bytesToHex(salt.digest());
подводить итог
Как v3, так и v5 имеют хорошие атрибуты. разные системы могут использовать одни и те же пространства имен и имена для создания одних и тех же идентификаторов UUID. Это хороший выбор для создания иерархических UUID.
Если вам нужна только простая генерация UUID, вы можете использовать v4.
java (Серия из 2 частей)
Оригинал: “https://dev.to/andylow/java-uuid-3onm”