生成 22 个字符的 uuid?
Generate 22-character uuid?
我需要在 python 中生成一个 uuid
。
我要与之交互的应用程序使用 22 个字符 uuids
。
这些似乎是通过生成 char-32
uuid 并对它进行 base64 编码生成的。
现在,如果我尝试在 python 中这样做,我的(base64 编码)uuid
总是有 24 个字符。
目前我只是 "cut off" 编码后的 uuid
22 个字符。
不确定这是否有效。我很可能会以这种方式获得重复项。
我可能在生成我的 uuid 时犯了错误吗?
我的代码:
import uuid
import base64
my_uuid = new_occ_id = base64.urlsafe_b64encode(uuid.uuid4().bytes)
my_uuid_22 = new_occ_id = my_uuid[0:22]
print(my_uuid)
print(my_uuid_22)
...产量(!!更正输出!!):
b'1K-HAjUjEemzDxwbtRxjwA=='
b'1K-HAjUjEemzDxwbtRxjwA'
来自应用程序的示例 UUID
:
051MZjd97kcBgtZiEH}IvW
您确定这是该代码的输出吗?似乎不是,第一个字符串有 22 个字节(不是 24 个字节),第二个没有终止引号。无论如何...
我不知道 22 字节压缩 UUID 的实现,但是根据 base64 编码的工作原理,如果确实使用了,我会说是的,你可以简单地删除最后两个字符。
当输入为 16 字节时,最后两个 base64 字符将始终是两个填充字符 ==,因为当时 base64 正在编码 3 个字节(15 个输入产生 20 个输出),留下一个单独的输入字节需要填充。解码器有时需要填充,但有时会忽略它们,因为它们可以计算,并且不包含任何实际数据。
然而,正如有人所说,“}”没有用于最常见的 base64 字符集中,也没有用于 urlsafe 字符集中。通常只是最后两个字符不同,通常它们是 +/ 或在 urlsafe -_ 中,但您的实现似乎使用 { 等等。疯狂的猜测是 } 或 |但是您必须查看现有的压缩 uuid 以查看是否在 A-Za-z0-9 字符之外找到另一个字符,除非您可以找到目标应用程序的规范。
我需要在 python 中生成一个 uuid
。
我要与之交互的应用程序使用 22 个字符 uuids
。
这些似乎是通过生成 char-32
uuid 并对它进行 base64 编码生成的。
现在,如果我尝试在 python 中这样做,我的(base64 编码)uuid
总是有 24 个字符。
目前我只是 "cut off" 编码后的 uuid
22 个字符。
不确定这是否有效。我很可能会以这种方式获得重复项。
我可能在生成我的 uuid 时犯了错误吗?
我的代码:
import uuid
import base64
my_uuid = new_occ_id = base64.urlsafe_b64encode(uuid.uuid4().bytes)
my_uuid_22 = new_occ_id = my_uuid[0:22]
print(my_uuid)
print(my_uuid_22)
...产量(!!更正输出!!):
b'1K-HAjUjEemzDxwbtRxjwA=='
b'1K-HAjUjEemzDxwbtRxjwA'
来自应用程序的示例 UUID
:
051MZjd97kcBgtZiEH}IvW
您确定这是该代码的输出吗?似乎不是,第一个字符串有 22 个字节(不是 24 个字节),第二个没有终止引号。无论如何...
我不知道 22 字节压缩 UUID 的实现,但是根据 base64 编码的工作原理,如果确实使用了,我会说是的,你可以简单地删除最后两个字符。
当输入为 16 字节时,最后两个 base64 字符将始终是两个填充字符 ==,因为当时 base64 正在编码 3 个字节(15 个输入产生 20 个输出),留下一个单独的输入字节需要填充。解码器有时需要填充,但有时会忽略它们,因为它们可以计算,并且不包含任何实际数据。
然而,正如有人所说,“}”没有用于最常见的 base64 字符集中,也没有用于 urlsafe 字符集中。通常只是最后两个字符不同,通常它们是 +/ 或在 urlsafe -_ 中,但您的实现似乎使用 { 等等。疯狂的猜测是 } 或 |但是您必须查看现有的压缩 uuid 以查看是否在 A-Za-z0-9 字符之外找到另一个字符,除非您可以找到目标应用程序的规范。