mid 1.0.1

Obtaining a unique device identifier for MacOS/Linux/Windows
Documentation
<a href="https://crates.io/crates/mid"><img src="https://img.shields.io/crates/v/mid?style=for-the-badge&logo=rust&color=orange" /></a>
<a href="https://docs.rs/mid/latest/mid/">
<img src="https://img.shields.io/badge/docs-latest-blue.svg?style=for-the-badge&logo=rust&color=blue"
      alt="docs.rs docs" />
</a>

## MachineID для Rust

Получите уникальный хешированный идентифактор устройства на базе MacOS/Linux/Windows.

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

Далее, ознакомьтесь с параметрами, которые мы используем на каждой из платформ.

### MacOS

```bash
system_profiler SPHardwareDataType
```

Команда возвращает информацию о аппаратных характеристиках компьютера. Используемые параметры:

- **Model Number**: Этот параметр представляет собой номер модели компьютера или устройства. Он используется для уникальной идентификации конкретной модели в рамках производителя.

- **Serial Number**: Этот параметр является уникальным серийным номером компьютера или устройства. Он используется для идентификации конкретной единицы в рамках определенной модели.

- **Hardware UUID**: Этот параметр представляет уникальный идентификатор аппаратного обеспечения (UUID) компьютера или устройства. Он служит для обеспечения уникальной идентификации конкретной единицы в различных системах и средах.

- **Provisioning UDID**: Этот параметр представляет уникальный идентификатор устройства (UDID), который может использоваться в процессе предоставления или настройки устройства, обычно в корпоративной или управляемой среде.

```bash
system_profiler SPSecureElementDataType
```

Команда возвращает информацию о безопасном элементе (Secure Element). Этот элемент используется для хранения зашифрованных данных, таких как информация о платежных картах и другие конфиденциальные данные. Используемые параметры:

- **Platform ID**: Уникальный идентификатор платформы, к которой относится Secure Element (безопасный элемент).
- **SEID**: Уникальный идентификатор безопасного элемента (Secure Element ID). Создается при прошивки NFC чипа на заводе производителя.

### Linux

- `cat /etc/machine-id`: Возвращает идентификатор (ID) машины, который используется для уникальной идентификации компьютера в Linux системах. К сожалению, этот параметр подвержен изменениям, и пока не найдено надежного решения для Linux.

### Windows

- `wmic csproduct get UUID`: Возвращает уникальный идентификатор (UUID) продукта компьютера. Обычно связан с материнской платой компьютера. В редких случаях он может измениться после замены или переустановки материнской платы или после изменения BIOS/UEFI на устройстве.

- `wmic bios get serialnumber`: Возвращает серийный номер BIOS компьютера. Обычно остается постоянным и не подлежит изменению.

- `wmic path win32_baseboard get serialnumber`: Возвращает серийный номер базовой платы компьютера. Обычно остается постоянным и не подлежит изменению.

- `wmic cpu get processorid`: Возвращает идентификатор процессора компьютера. Должен оставаться неизменным, за исключением случаев замены процессора.

## Как установить

Добавить зависимость в Cargo.toml

```toml
[dependencies]
mid = "1.0.0"
```

Или установить с помощью Cargo CLI

```bash
cargo add mid
```

## Как использовать

Максимально просто

```rust
let machine_id = mid::get("mykey").unwrap();
```

Использование в функции с обработкой ошибки

```rust
fn get_machine_id() -> Result<String, String> {
    // openssl rand -hex 32
    let key = "293273abaf6fcb31d4a9b47b70a20b21133ff08852834c52c5f42ed8153b274a";

    match mid::get(key) {
        Ok(mid) => Ok(mid),
        Err(err) => {
            println!("MID error: {}", err.to_string());
            Err(err.to_string())
        }
    }
}
```

### Подписывайтесь на мой Х

Здесь я буду делиться своими разработками и проектами
https://x.com/doroved

### Ссылки

- [machineid-rs]https://github.com/Taptiive/machineid-rs
- [machine_uuid]https://github.com/choicesourcing/machine_uuid
- [rust-machine-id]https://github.com/mathstuf/rust-machine-id
- [app-machine-id]https://github.com/d-k-bo/app-machine-id