生成22个字符的uuid?

时间:2019-02-20 11:13:25

标签: python uuid

我需要在python中生成一个uuid

我要与之交互的应用程序使用22个字符的uuids。 这些似乎是通过生成char-32 uuid并对其进行base64编码而生成的。

现在,如果我尝试在python中执行此操作,那么我的(以base64编码的)uuid总是有24个字符。

目前,我只是在22个字符之后“切断”编码后的uuid。 不确定这是否有效。我很可能会以这种方式得到副本。 在生成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

1 个答案:

答案 0 :(得分:0)

您确定这是该代码的输出吗?似乎不是,第一个字符串有22个字节(不是24个字节),第二个字符串没有终止引号。反正...

我不知道22字节压缩UUID的实现,但是基于base64编码的工作原理,如果确实使用了该编码,我会说是的,您只需删除最后两个字符即可。

当输入为16字节时,最后两个base64字符将始终为两个填充字符==,因为base64当时编码3个字节(15 in产生20 out),剩下一个需要填充的单独输入字节。解码器有时需要填充,但有时会忽略它们,因为它们可以计算出来,并且不包含任何实际数据。

但是,就像有人说的那样,最常见的base64字符集中没有使用“}”,URLsafe中也没有使用“}”。通常只是最后两个字符有所不同,通常它们是+ /或urlsafe -_,但是您的实现似乎使用了{等。大胆的猜测是}或|但是除非您可以找到目标应用程序的规范,否则您将不得不浏览现有的压缩uuid,以查看是否在A-Za-z0-9字符之外找到另一个字符。

相关问题