#uuid #human-readable #unique #id #shortid #uuid-v4

bin+lib uuid-readable-rs

易于记忆的唯一句子,充当 UUID

7 个版本

0.1.6 2024 年 7 月 8 日
0.1.5 2021 年 8 月 9 日

解析实现 中排名 283

Download history 6/week @ 2024-04-19 3/week @ 2024-04-26 3/week @ 2024-05-10 33/week @ 2024-05-17 21/week @ 2024-05-24 24/week @ 2024-05-31 14/week @ 2024-06-07 9/week @ 2024-06-14 2/week @ 2024-06-21 140/week @ 2024-07-05 15/week @ 2024-07-12 14/week @ 2024-07-19 42/week @ 2024-07-26 4/week @ 2024-08-02

每月下载量 81
liff 中使用

AGPL-3.0

530KB
34K SLoC

uuid-readable-rs

易于记忆的唯一句子,充当 UUID

AGPL License crates.io Released API docs CI

生成易于记忆的句子,充当可读 UUID。

  • 基于 UUID v4 构建
  • 可选地传入您的 UUID 以从中生成句子
  • 语法 正确 的句子
  • 易于记忆(至少部分如此)
  • 大小选择(32 位令牌或使用 short()generate() 分别)的 128 位令牌)

状态

即使这个项目没有太多更新,它也没有被放弃。

只是没有太多事情要做,因为任何更改都可能几乎破坏整个兼容性。但如果出现任何安全问题,我会尽快处理。

安全

这个项目并不意味着是加密安全的! 不要将其用作安全的随机生成器

  • 25^12 种可能的组合用于 generate()(使用 128 位令牌)
  • 25^5 种可能的组合用于 short()(使用 32 位令牌)

请注意,由 generate() 生成的句子和原始 UUID 形成一一对应,因此没有熵的损失。

生成的句子

对于 版本,即 generate(),这个库生成的典型句子如下

Wildon Mollie Behka the bubbler of Arecibo moaned Chavey Haney Torbart and 10 calm kingfishers

在内部这对应于

  • 12 位用于名称
  • 11 位用于名称
  • 14 位用于名称
  • 13 位用于人名
  • 13 位用于地点
  • 10 位用于动词
  • 12 位用于名称
  • 11 位用于名称
  • 14 位用于名称
  • 5 位用于数字
  • 6 位用于形容词
  • 7 位用于动物

为确保熵不丢失,以表示10位数字的动词为例,这意味着我们使用了至少有2^10(1024)种可能的动词列表。

对于简短版本,即 简短 - 也称为 short(),一个典型的句子看起来像这样:

Zink recorded by 127 large armadillos

这对应于

  • 6位用于名称
  • 6位用于动词
  • 7位用于数字
  • 8位用于形容词
  • 5位用于动物

由于简短版本长度为32位,并从128位UUID派生而来,因此它不如长版本安全或随机。它也不与原始UUID形成任何双射。

示例

use uuid::Uuid;
use uuid_readable_rs::{generate_from, short_from, generate, short, generate_inverse};

// You can define your own UUID and pass it to uuid_readable_rs like so
let uuid = Uuid::new_v4();
let sentence_128: String = generate_from(uuid);
let sentence_32: String = short_from(uuid);

// You can also get an UUID from a sentence that was previously generated
let original_uuid: Uuid = generate_inverse(sentence_128).unwrap();
assert_eq!(uuid, original_uuid);

// Or let uuid_readable_rs handle the Uuid generation
let sentence_128: String = generate();
let sentence_32: String = short();

致谢

感谢 @Debdut 提供原始想法(https://github.com/Debdut/uuid-readable)。

注:他的版本可能目前不适合使用,直到 https://github.com/Debdut/uuid-readable/issues/8 被修复。

依赖项