產生確定性的 UUID v5
第 5 版 UUID 由命名空間 UUID 與名稱透過 SHA-1 推導而來。任何人對相同的命名空間與相同的名稱進行雜湊,都會得到完全相同的 UUID,因此 ID 可以重新計算,不必儲存。
計算範例
- 命名空間(UUID)
- DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
- 名稱
- example.com
- 結果
- cfbff0d1-9375-5685-968c-48ce8b15ae17
- 命名空間(UUID)
- DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
- 名稱
- Example.com
- 結果
- a1feb884-07f5-5a14-8edb-cb659a7fbadc
運作原理
- 將命名空間的 16 個位元組與名稱的 UTF-8 位元組串接後進行 SHA-1 雜湊。摘要的前 16 個位元組在設定版本位元(5)與變體位元後即成為 UUID。
- RFC 9562 預先定義了 DNS 名稱、URL、ISO OID 與 X.500 辨別名稱的命名空間。你也可以把任何自訂 UUID 當作私有命名空間。
- 名稱會逐位元組比較:大小寫、空格與結尾斜線都會改變結果,因此請先將名稱正規化。由於輸出可以預測,切勿將 UUID v5 當作機密值。
一次生成1-100個UUID
DNS命名空間:6ba7b810-9dad-11d1-80b4-00c04fd430c8(預設)
要雜湊的名稱(例如域名、電子郵件等)
關於UUID
UUID v1: 基於時間的UUID,包含時間戳記和生成UUID的電腦的MAC位址。當您需要知道UUID何時建立時很有用。
UUID v4: 隨機生成的UUID。這是最常用的版本,在最小資訊洩露的情況下提供良好的唯一性。
UUID v5: 使用SHA-1雜湊的基於名稱的UUID。給定相同的命名空間和名稱,您將始終獲得相同的UUID。對於確定性UUID生成很有用。