
网络协议和支持(一)、uuid模块
发布日期:2021-05-20 07:34:38
浏览次数:7
分类:精选文章
本文共 1583 字,大约阅读时间需要 5 分钟。
1. 背景知识
UUID(通用唯一标识符)是一种用于确保在时间和空间上唯一性的标识符。它通过MAC地址、时间戳、命名空间、随机数以及伪随机数等多个因素来保证唯一性,确保每个UUID拥有固定的128位大小。这种独特性使得UUID无需繁琐的注册过程,就可以生成一个全新的、可靠的标识符。ANCED reason for using UUIDs is that many applications need a unique identifier without any specific meaning, often used for database fields or dynamic UI elements in front-end libraries.
2. Python的uuid模块
Python的uuid模块提供了多种函数来生成不同版本的UUID,包括 uuid1()、uuid3()、uuid4() 和 uuid5()。以下是这些函数的常见用法:uuid.uuid1([node[, clock_seq]]):基于主机ID、序列号和当前时间生成UUID。
如果未指定node参数,会自动获取主机的硬件地址(通过getnode()函数)。如果未指定clock_seq,系统会使用随机生成的14位序列号。该方法生成的UUID包含了主机的网络地址,因此可能存在隐私问题。uuid.uuid3(namespace, name):通过计算命名空间和名称的MD5散列值生成UUID。
这种方法可以确保同一命名空间中的不同名称生成唯一的UUID,同时不同命名空间的UUID也具有唯一性。需要注意的是,同一命名空间中的相同名称会生成相同的UUID。uuid.uuid4():基于随机数生成UUID。
该函数使用伪随机数,由于产生随机数的机制,存在一定的重复概率。uuid.uuid5(namespace, name):通过计算命名空间和名称的SHA-1散列值生成UUID。
该方法与uuid.uuid3()相似,算法实现相同。
3. uuid模块的典型使用方法
以下是通过Python的uuid模块生成UUID的典型示例:import uuid# 基于主机ID和当前时间生成UUIDuuid.uuid1() # 返回一个类似 "a8098c1a-f86e-11da-bd1a-00112444be1e" 的UUID# 使用命名空间的MD5散列值和网站名称生成UUIDuuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') # 返回一个类似 "6fa459ea-ee8a-3ca4-894e-db77e160355e" 的UUID# 生成随机UUIDuuid.uuid4() # 返回一个随机的UUID类似 "16fd2706-8baf-433b-82eb-8c7fada847da"# 使用SHA-1散列值生成UUIDuuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') # 返回一个类似 "886313e1-3b8a-5372-9b90-0c9aee199e5d" 的UUID# 从一个字符串生成UUIDx = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')# 将其转换为标准形式str(x)# 获取UUID的原始16字节表示x.bytes # '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'# 从16字节字符串生成UUIDuuid.UUID(bytes=x.bytes)
通过上述方法,可以轻松生成和验证UUID的各个版本,满足不同场景的需求。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月30日 09时09分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》
2019-03-16
问题解决28:微信网页授权出现redicet_uri 参数错误
2019-03-16
LeakCanary 中文使用说明
2019-03-16
反转链表,(5)
2019-03-16
Camera (api1)的打开过程
2019-03-16
wxwidgets绘图
2019-03-16
wxwidgets事件处理
2019-03-16
用OpenCv转换原始图像数据到wximage
2019-03-16
codeblocks下wxWidgets编译与配置
2019-03-16
OpenCv+wxwidgets尝试
2019-03-16
wxwidgets自定义事件+调试
2019-03-16
wxwidgets编写多线程程序--wxThread
2019-03-16
BUUCTF:[湖南省赛2019]Findme
2019-03-16
ciscn2021西北部分pwn
2019-03-17
p144循环网络
2019-03-17
Finger.01 - ESP8266模块STA模式调试
2019-03-17
三维点云处理
2019-03-17
springboot security 基于redis的session共享(7)
2019-03-17
vue 权限管理 菜单按钮权限控制(7)
2019-03-17
vue 权限管理 主题切换(8)
2019-03-17