关闭

UUID生成方法

标签: LINUX分布式计算应用软件架构
33人阅读 评论(0) 收藏 举报
分类:
UUID生成方法有时间、名称、随机数三种策略
基于时间的UUID生成算法(版本1)
确定UTC时间(60位 Time)和时间序列值(14位 ClockSequence);
设置TimeLow(对应Time的31-0位);
设置TimeMid(对应Time的47-32位);
设置VersionAndTimeHigh(4位版本号及Time的59-48位);
设置VariantAndClockSeqHigh(变体位及对应ClockSequence的13-8位);
设置ClockSeqLow(对应ClockSequence的7-0位);
设置Node(对应48位MAC地址)。

 基于名称的UUID生成算法(版本3和版本5)
针对相应的命名空间(如DNS、URL、OID等)分配一个UUID作为所有UUID的命名空间标识;
将名称转换为字节数列;
使用MD5或SHA-1算法对与名称关联的命名空间标识进行计算,产生16字节哈希结果;
设置TimeLow(对应哈希值的3-0字节);
设置TimeMid(对应哈希值的5-4字节);
设置VersionAndTimeHigh(对应哈希值的7-6字节),以相应版本号重写对应位(第9字节的高4位);
设置VariantAndClockSeqHigh(对应哈希值的第8字节),重写变体对应位(第7字节的高2位,本标准对应值为10);
设置ClockSeqLow(对应哈希值的第9字节);
设置Node(对应哈希值的15-10字节)。
由于SHA-1哈希结果为160位(20字节),本算法中,需要将FIPS PUB 180-2中的SHA-1算法的哈希值字节顺序反转(字节内顺序不变),UUID使用其15-0字节,19-16字节被丢弃
 

基于随机数的UUID生成算法(版本4)
设置VariantAndClockSeqHigh的变体位值为10;
设置VersionAndTimeHigh的4位版本号;
设置剩余位为随机值。
本文中讨论的密码学随机数,主要根据系统可以提供的信息(内存、硬盘、句柄、程序运行的线程、进程、句柄、堆栈等),利用SHA-1等哈希算法得到。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:324次
    • 积分:140
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档