7 个版本
0.1.6 | 2024 年 7 月 8 日 |
---|---|
0.1.5 | 2021 年 8 月 9 日 |
在 解析实现 中排名 283
每月下载量 81
在 liff 中使用
530KB
34K SLoC
生成易于记忆的句子,充当可读 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 被修复。