Python中UUID生成的原理和用法

Python中UUID生成的原理和用法

在实际的敲代码过程中,你可能会被要求在请求头或者请求体中加个字段,传个唯一标识,
说到唯一标识,那怎么能少了大名鼎鼎的uuid呢,UUID是通用唯一识别码(Universally Unique Identifier)的缩写,
UUID是基于当前时间、计数器(counter)
和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的,
因为它们是不会被复制的独特标识符

请求头

headers = {
                'gateway-appid': appId,
                'gateway-rtime': appRtime,
                'gateway-sig': appSig,
                'gateway-uuid': appUuid,
            }

python中uuid有四种,uuid1,uuid3,uuid4,uuid5,至于为啥没有uuid2,我没查到

uuid1:基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到,如果能知道当前时间是可以推算出uuid1的,你可以多运行几次,是不是几次的结果很相似

import uuid
aaa = uuid.uuid1()
print(aaa)
# 41ca5780-518f-11eb-97a3-144f8aa8a024
# be9afbe8-518f-11eb-af95-144f8aa8a024
# d3569242-518f-11eb-83a5-144f8aa8a024

uuid4:根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的。也基本上是不会重复的

import uuid
bbb = uuid.uuid4()
print(bbb)
# 4810c2a8-4abc-4110-812e-9b7d97d7ad4d
# 0156fd57-b844-4fbe-8487-200dca908957
# 12843ad0-8cae-408d-acf2-0be11e148911

uuid3:基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。就是说如果name一致则生成的uuid3是一样的,你可以测试下不管运行多少次都是一样的uuid3

import uuid

name = 'Python'
namespace = uuid.NAMESPACE_URL
ccc = uuid.uuid3(namespace,name)
print(ccc)
# 65ac9a41-6b50-35b9-94b1-9c61ec6fa92b

uuid5:和基于名字的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法,和uuid3差不多,uuid3用的是MD5算法,uuid5用的是SHA1算法, 如果你name不换,生成的uuid5一直是同一个

import uuid

name = 'Python'
namespace = uuid.NAMESPACE_URL
ddd = uuid.uuid5(namespace,name)
print(ddd)
#380f7d71-60ea-5bca-877d-3b2248588b05

你可能感兴趣的:(python,python,算法,加密解密)