GB T 17969.8-2010 信息技术 开放系统互连 OSI登记机构操作规程 第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件.pdf

上传人:testyield361 文档编号:244867 上传时间:2019-07-13 格式:PDF 页数:36 大小:1.16MB
下载 相关 举报
GB T 17969.8-2010 信息技术 开放系统互连 OSI登记机构操作规程 第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件.pdf_第1页
第1页 / 共36页
GB T 17969.8-2010 信息技术 开放系统互连 OSI登记机构操作规程 第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件.pdf_第2页
第2页 / 共36页
GB T 17969.8-2010 信息技术 开放系统互连 OSI登记机构操作规程 第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件.pdf_第3页
第3页 / 共36页
GB T 17969.8-2010 信息技术 开放系统互连 OSI登记机构操作规程 第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件.pdf_第4页
第4页 / 共36页
GB T 17969.8-2010 信息技术 开放系统互连 OSI登记机构操作规程 第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件.pdf_第5页
第5页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、ICS 35.100.01 L 79 GB 国家标准国不H-H: ./、民中华人GB/T 17969.8-20 1 O/ISO/IEC 9834-8 :2005 信息技术开放系统互连OSI登记机构操作规程第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.客体标识符部件Information technology-Open systems interconnection一Procedures for the operation of OSI registrartion authorities一Part 8: Generation and registration of Univer

2、sally Unique Identifiers (UUIDs) and their use as ASN. 1 object identifier components (ISO/IEC 9834-8: 2005 , IDT) 2011-01-14发布妻生击马防伪中华人民共和国国家质量监督检验检菇总局中国国家标准化管理委员会2011-05-01实施发布GB/T 17969.8-2010/ISO/IEC 9834-8 :2005 目次前言.1 引言.II I 范围2 规范性引用文件.3 术语和定义4 缩略语25 记法.6 UUID结构和表示.7 使用UUID来形成OID8 使用UUID来形成U

3、RN9 UUID的比较和排序规则10 确认11 变体的比特12 UUID宇段与传输字节次序的使用13 设置基于时间的UUID字段811 设置基于名称的UUID字段15 设置基于随机数的UUID字段16 UUID的登记及其用作OID部件10附录A(资料性附录)有效生成基于时间的UUID的算法四附录B(资料性附录)基于名称的UUID的特性14附录c(资料性附录)在系统中随机数的生成.15 附录D(资料性附录)实例实现.16 参考文献.28 G/T 17969.8-201 O/ISO/IEC 9834-8: 2005 目。吕GB/T 17969在信息技术开放系统互连OSI登记机构操作规程总标题下,分

4、为以下几个部分:一第1部分:一般规程;一第3部分:IS0和ITU-T联合管理的顶级弧下的客体标识符弧的登记;+第5部分:VT控制客体定义的登记表;一-一第6部分:应用进程和应用实体;第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件。本部分是GB/T17969的第8部分。本部分等同采用国际标准ISO/IEC9834-8: 2005(信息技术开放系统互连OSI登记机构操作规程第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.1客体标识符部件。与ISO/IEC 9834-8的等同文本为ITU-T建议x.667 0 本部分的附录A、附录B、附录C和附录D为

5、资料性附录。本部分由全国信息技术标准化技术委员会提出并归口。本部分起草单位:中国电子技术标准化研究所,北京易华世纪科技发展中心。本部分主要起草人:徐冬梅、王茜、董挺。I GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 51 GB/T 17969的本部分规定了通用唯一标识符(UUID)的生成和可选登记。UUID是一个16个八位位组(128比特)的位组串。16个八位位组能被解释为一个元符号整数编码,并且所涉及到的整数值能被用作在弧joint-iso-itu-tuuid(25)下的OID树的弧。这使用户能生成OID,而无需任何登记规程。UUID也被称作全球唯一标识符(

6、GUID),但是该术语在本部分中,不予使用。UUID最初被用于网络计算系统(NCS)lJ,后来被用于开放软件基金会的分布式计算环境(DCE)2J 0 ISO/IEC 11578 3J包含了在本部分中规定的某些(但并非全部)UUID格式的简短定义,在本部分中的规范与所有这些早期规范相一致。形成OID部件的UUID都是用ASN.1值记法被表示为其整数值的十进制,但是对于所有其他显示目的来说,更常见的是以十六进制数来表示它们,以一个连字符分隔16个八位位组UUID范围内的不同字段。该表示在本部分中予以定义。如果按照在本部分中定义的机制之一来生成,或者保证UUID不同于公元3603年前生成的所有其他U

7、UID,或者保证UUID可能极为不同(取决于所选择的机制)。不要求集中式机构来管理UUID,但是要求自我生成的UUID的集中登记,并且提供了对UUID的自动生成(使用在本部分中定义的算法)和登记。集中生成的UUID被保证不同于集中生成的所有其他UUID。已登记的UUID被保证不同于所有其他登记的UUIDoUUID能用于多用途,从触发具有极短生命周期的客体,到可靠地标识出跨越网络的每个持久客体,特别是(但不必是)作为ASN.1客体标识符(OID)值的或统一资源名称(URN)的一部分。在本部分中规定的UUID生成算法支持很高的分配速率:每机器每秒10兆(如果有必要),所以,UUID也能用作事务ID

8、。一个资料性附录提供了用C语言表示的程序,它将按照本部分来生成UUID。为了生成唯一UUID规定了三种算法,以使用不同机制来确保唯一性。它们产生了不同版的UUID。第1个(和最普通)机制产生了所谓的基于时间的版本。这些UUID在单台机器中能够以每秒10兆的速率来生成。对于在单个计算机系统内生成的UUID,带有100ns的粒度的,基于协调世界时(UTC)的60比特时戳(用作时钟值)被用来保证在约1600年周期内的唯一性。对于以同一时戳通过不同系统生成的UUID,唯一性是通过使用在GB/T15629. 3中规定的48比特媒体访问控制(MAC)地址来获得的(这是被用作结点值)0 (这些地址在大多数已

9、联网的系统上通常早已用到,否则从IEEE的MAC地址登记机构可获得见4J。如果在某一系统上不能用到UTC时间,或如果没有MAC地址可用,则对于基于时间的版本,规定了生成时钟和结点值的可替换方法。第2个机制产生了基于名称的版本的单个UUID,其中,密码散列技术被用于根据全球元二义文档(文本)名称来产生128比特UUID值。E 第3个机制使用伪随机或真随机数生成来产生在128比特值中的大多比特。第5章规定了用于八位位组次序和比特次序命名的和用于规范传输次序的记法。第6章规定UUID的结构以及用二进制、十六进制或作为单个整数值对它的表示。第7章和第8章规定了分别在OID或URN中使用UUID。第9章

10、规定了比较UUID的规则,以测试相等性或提供在两个UUID之间的排序关系。第10章讨论了检验UUID有效性的可能性。一般来说,UUID具有小的冗余度,并且有检验其有GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 效性的小范围。然而,如果接受了登记的UUID,则该UUID被保证不同于所有其他登记的UUID。第11章描述了在UUID中历史上使用的某些比特,以定义UUID格式的不同变体,以及规定了按照本部分定义的UUID的这些比特的值。第12章规定了在不同版本中使用的UUID的字段,而这些不同版本是定义的(基于时间的、基于名称的和基于随机数的版本)。它还定义了传输宇节

11、次序。第13章规定了设置基于时间的UUID的字段。第14章规定了设置基于名称的UUID的宇段。第15章规定了设置基于随机数的UUID的字段。第16章涉及到UUID的登记机构的操作,以使它们能集中登记和提供唯一性保证。所有附录都是资料性附录。附录A描述了有效生成基于时间的UUID用的各种算法。附录B讨论了基于名称的UUID宜具有的特性,这些特性对选择供生成这样的UUID时用的名称空间有影响。附录C提供了关于在计算机系统中能用来生成随机数的机制的指南。附录D包含了以C程序设计语言表示的完整程序,它能用来生成UUID。阳山GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005

12、 1 范围信息技术开放系统互连OSI登记机构操作规程第8部分:通用唯一标识符(UUID)的生成和登记及其用作ASN.l客体标识符部件GB/T 17969的本部分规定了使用户能产生128比特标识符的格式和生成规则,而这些128比特标识符或被保证是全球唯一的或被保证是高概率的、全球唯一的。遵守本部分以每100ns生成一个新的UUID的速率来生成的UUID既适用于暂时使用,也可作为永久标识符。本部分是起源于UUID及其生成的早期非标准规范,并且在技术上等同于这些早期规范。本部分规定了用于UUID的基于Web的登记机构操作规程。本部分还规定和允许使用UUID(登记的或不登记的)作为在弧joint-is

13、o-itu-tuuid (25)之下的OID部件。这使用户能生成OID,而无需任何登记规程。本部分还规定和允许使用UUID(登记的或不登记的)来形成URNo2 规范性引用文件下列文件中的条款通过GB/T17969本部分的引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本部分,然而,鼓励根据本部分达成胁议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本部分。GB/T 17969. 1信息技术开放系统互连OSI登记机构的操作规程第1部分:一般规程(GB/T 17969.1-2000, eqv ISO/IEC 9

14、834-1: 1993) GB/T 16262. 1-2006信息技术抽象语法记法一(ASN.l)第1部分:基本记法规范(ISO/IEC 8824-1: 2002 , IDT) GB/T 15629.3信息技术系统局域网第3部分:带碰撞检测的载波侦听多址访问(CSMA/CD)的访问方法和物理层规范(GB/T15629.3-1995 , idt ISO/IEC 8802-3: 1990) GB/T 13000-2010信息技术通用多八位编码字符集(UCS)CISO/IEC 10646: 2003 , IDT) GB/T 18238.3信息技术安全技术散列函数第3部分:专用散列函数(GB/T182

15、38.3-2002 , idt ISO/IEC 10118-3: 1998) FIPS PUB 180-2: 2002 联邦信息处理标准,安全散列标准(SHS)IETF RFC 1321 (1992) MD5消息摘要算法IETF RFC 2141 (1997) URN i吾法3 术语和定义下列术语和定义适用于本部分。3. 1 ASN.1记法本部分使用了在GB/T16262. 1-2006中定义的下列术语:1 GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 a) 协调的世界时间(UTC)Coordinated Universal Time (UTC); b) (A

16、SN.1)客体标识符(ASN. 1) objcct identifier。3.2 登记机构本部分使用了GB/T17969. 1中定义的下列术语:a) 客体标识符树(或OID树)object identifier tree(or OID tree) ; b) 登记registration; c) 登记机构registration authority; d) 登记规程registration procedures Q 3.3 网络术语本部分使用了在GB/T15629.3中定义的下列术语zMAC地址MAC address 0 3.4 附加定义3.4. 1 密码质量级随机数cptographic-qu

17、ality random-number 由某一机制生成的随机数或伪随机数,它确保有效分散的重复生成的值被接受供密码工作使用(以及在这样的工作中使用。3.4.2 基于名称的版本name-based version 使用密码散列的名称空间的名称和在该名称空间中的名称来生成的UUID。3.4.3 名称空间name space 生成客体名称的系统,该系统确保在名称空间内无二义性标识。注:名称空间的若干举例是网络域名系统、URN、OID、目录可辨别名(见5l)和在程序设计语言中的保留字。3.4.4 基于随机数的版本random-number-based version 使用随机数或伪随机数来生成的UUI

18、Do3.4.5 标准UUID变体stanard UUID variant 通过本部分规定的可能UUID格式的变体。注:在历史上,已经存在不同于本部分所规定的变体的UUIDS格式的其他规范。3.4.6 基于时间的版本time-base version 通过对标识某一系统的MAC地址和对基于前UTC时间的时钟值的使用所获得的唯一性UUID。3.4.7 通用唯一标识符(UUID)Universaly Unique Identifer (UUID) 按照本部分或按照某些历史规范所生成的128比特值,并且提供了系统之间的和将来的唯一值(也见3.4.5)。4 缩略语2 ASN.1 抽象语法记法1(Abst

19、ract Syntax Notation One) GUID全球唯一标识符(Globally Uniqne Identifier) IEEE 电气和电子工程师学会CInstitute of Electrical and Electronics Engincers , Inc. ) MAC媒体访问控制(Media Accass Contral) GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 MD5 消息摘要算法5(Message Digest algorithm 5) OID ASN.1客体标识符(ASN.1 Object Identifier) RA 登记机构

20、(Registration Authority) SHA-1 安全散列算法1(Secure Hash Algorithm1) URL 统一资源定位符(Uniform Resource Locator) URN 统一资源名称(Uniform Resource Name) UTC协调的世界时间(Coordinated Universal Time) UUID 通用唯一标识符(Universally Unique Identifier) 5 记法5. 1 本部分规定了使用第一个或最后一个的术语UUID的八位位组序列。第一个八位位组也称作八位位组15,最后一个八位位组称作八位位组。5.2 UUID内的

21、比特还被编号为比特127到比特。,其比特127作为八位位组15的最高有效比特,比特0作为八位位组0的最低有效比特。5.3 本部分中使用图和表时,最高有效八位位组(和最高有效比特)被显示在页面的左边。这与八位位组的传输次序相对应,其中,最左边的八位位组首先发送。5.4 本部分中所使用的许多值被表达为某一给定长度(设为N)的元符号整数值。N比特元符整数值的比特被编号为比特(N-1)到比特。,其比特(N-1)作为最高有效比特,比特0作为最低有效比特。5.5 这些记法仅用于本部分。在计算机存储器中的表示是不标准化的,并且依赖于系统体系结构。6 UUID结构和表示6.1 UUIn字段结构6. 1. 1

22、UUID被规定为6个字段的有序序列。UUID依据这些UUID宇段的拼接来规定。UUID字段被命名为:a) TimeLow宇段;b) TimeMid宇段;c) VersionAndTimeHigh字段;d) VariontAndClockSegHigh字段;e) ClockSeqLow宇段;。Node字段。6. 1. 2 定义的UUID各宇段具有上述列出的有效次序,Tim巳Low作为最高有效字段(TimeLow吨仁特31是UUID的比特127),Node作为最低有效宇段(Node的比特0是UUID的比特的。6. 1. 3 这些UUID字段的内容依据版本、变体、时间、时钟序列和特定元符号整数值来规

23、定(每个都具有固定的比特长度)。这些值的设置在第12章中规定,它们与上述UUID字段的映射在12.1中规定。注:作为某些UUID字段的名称(例如,Ti盯leLow,TimeMid和TimeHigh)的一部分,意味着从特定元符号整数值(例如,从时间值的比特59的中产生的UUID中的连续比特次序和在该无符号整数值中的连续比特值是不相同的。这是由于历史原因造成的。6.2 二进制表示6.2.1 UUID应按二进制表示为16个八位位组,它们是将每个字段通过元符号整数固定长度编码成一个或多个八位位组,并将其拼接而成的。要用于每个字段的八位位组数应是:a) TimeLow字段:4个八位位组;b) TimeM

24、id字段:2个八位位组;3 G/T 17969.8-20 1 O/ISO/IEC 9834-8 :2005 c) VersionAndTime High宇段:2个八位位组;d) VariontAndClockSegHigh宇段:1个八位位组;e) ClockSeqLow字段:1个八位位组;f) Node字段:6个八位位组。注:UUlD字段的次序在计算机系统中是一种常用表示,并且以十六进制文本表示(见6.的。6.2.2 每个UUID宇段的元符号整数编码中的最高有效比特应是它的第一个八位位组(八位位组N,即最高有效八位位组)的最高有效比特,元符号整数编码中的最低有效比特应是它的最后一个八位位组(八

25、位位组0,即最低有效八位位组)的最低有效比特。6.2.3 UUID各宇段应按用最高有效字段后用最低有效宇段的顺序拼接而成(见6.1. 2)。6.3 单个整数值的表示UUID可以表示为单个整数值。为了获得UUID的单个整数值,应把其二进制表示的16个八位位组处理为无符号整数编码,亦即,把该整数编码的最高有效比特作为其16个八位位组的第1个八位组(八位位组1日的最高有效比特(比特7),把该整数编的最低有效比特作为其16个八位位组的最后一个八位位组(八位位组0)的最低有效比特(比特0)。注:当UUlD形成了第7章规定的OlD的一部分时,才使用单个整数值。6.4 十六进制表示对于十六进制格式来说,二进

26、制格式的八位位组应通过十六进制数字串表示,使用两个十六进制数字表示二进制格式的每个八位位组,第1个是八位位组15的4个高阶比特的值,第2个是八位位组15的4个低阶比特的值,依次类推,最后一个是八位位组0的最低阶比特的值(见6.5)。一个HYPHENMINUS(45)字符(见GB/T13000-2010)应被插人在十六进制表示的每对相邻字段之间,但在VariantAndClockSeqHigh字段和ClockScqLow宇段之间除外(见第8章中的举例)。6.5 十六进制表示的形式语法6.5.1 UUID十六进制表示语法的形式定义是使用GB/T16262. 1-2006第5章中定义的扩充BNF来规

27、定的,但在词项之间应没有空格除外。6.5.2 在BNF中使用了hexdigit词项,并且定义如下:词项的名称一-hexdigithexdigit应由下列符号之一组成:ABCDEFabcdef0123456789 6.5.3 UUID的十六进制表示应是产生式UUID: uurD . = TimeLow _ TimeMid _ VersionAndTimeHigh _ VariantAndClockSeqHigh ClockSeqLow _ Node TimeLow = HexOctet HexOctet HexOctet HexOctet TimeMid ,. = HexOctet HexOct

28、et VersionAndTimeHigh : : = 4 HexOctet HexOctet VariantAndClockSeqHigh : : HexOctet ClockSeqLow : : HexOctet Node GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 HexOctet HexOctet HexOctet HexOctet HexOctet HexOctet HexOctet . hexdigit hexdigit 6.5.4 生成UUID十六进制表示的软件宜不使用大写字母。注:建议在人类可阅读的十六进制表示中应该用小写字母。然而,要求处理

29、该表示法的软件能够接受在6.5.2中规定的大写字母和小写字母两者。7 使用UUID来形成OID使用UUID所形成的OID应是:joint-iso-itu-t uuid(25) = next_save) fp = fopen(state , wb); fwrite(st,sizeof st,1 , fp); fclose(fp); /养schedulenext save for 10 seconds from now必/next_save= timestamp + (10铸10丧1000提1000);/养get-current_time-gettime as 60-bit 100ns ticks

30、 since UUID epoch. Compensate for the fact that real clock resolution is less tha丑100ns.兴/voidget_current_time(uuid_time_t美timestamp)static int inited=O; static uuitime_t time_last; static unsigned16 uuids_this_tick;uuitime_ t time_now if(! inited) get_system_time(time_now) ; uuids_ this_ tick = UUI

31、DS_PER_TICK; ini ted = 1 for( ;) get_system_time(time_now) ; /养ifclock reading changed since last UUID generated,养/if (time_last ! = time_now) /并resetcount of uuids gend with this clock reading养/uuids_this_tick= 0; time_last = time_now; break; j if(uuids_this_tick (肌I工DS_PER_TICK) uuids this tick +

32、break; j /养goingtoo fast for our clock;spin养/ /祷addthe count of uuids to low order bits of the clock reading养/养timestamp= time_now + uuids_this_tick; /长true_random-generatea crypto-quality random number.养祷Thissample GBjT 17969.8-201 OjISOjIEC 9834-8: 2005 doesnt do that.养并养/static unsi归ed16true_rand

33、om(void) static int inited = 0; uuid_time_t time_now; if(! inited) get_system_time(time_now) time_now = time_now j uu工DS_PER_TICKsrand( (unsigned int) ( (time_now) )32)time_now)Oxffffffff);inited = 1; return randO; /必uuicreate_from_name-createa UUID using a飞amefrom a n皿espace必/void uuid_create_from_

34、name(uuid_t提uuid,uuid_t nsid, void兴name,intn四elen)MD5_CTX c; unsigned char hash16 ;uuid_t net_nsid; /养putname space identif ier in network byte order so i t hashes the same no matter what endian machine were on并/net_nsid = nsid; htonl(net_nsid.time_low); htons(net_nsid.time_mid); htons(net_nsid.time

35、_hi_and_version); MD5Init(c) ; MD5Update(c,net_nsid,sizeof net_nsid);MD5Update伍c,name,namelen);MD5Final(hash,c) ; /时hehash is in network byte order at this point并jformat_uuiv3(uuid,hash); /养format_uui叫_v3-makea uurD from a(pseudo)random 128-bit number并/void format_uuiv3(uuit并uuid,unsigned char hash1

36、6) /养convertUUID to local byte order养jmemcpy(uuid,hash,sizeof必uuid); ntohl(uuid-)time_low); ntohs(uuid-)time_mid); 21 GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 ntohs(uuid-)time_hi_and_version); /养putin the variant and version bits * /uuid-)time_hi_and_version= OxOFFF; uuid-)time_hi_and_version I = (3(

37、 (12); uuid-)clock_seq_hi_anq二reserved=Ox3F; uuid-)clock_seq_hi_anq二reservedI = Ox80; /并uuicompare-Comparetwo UUID7 s lexically and return养/#defineCHECK(f1, f2) if(f1! = f2) returnf1 (f2 ?-1: l;int uucompare(uuit养u1,uuit必u2)int i; CHECK(u1-)time_low,u2-)time_low);CHECK(u1-)time_mid,u2-)time_mid); CH

38、ECK(u1-)time_hi_anversion, u2-)time_hi_and_version); CHECK(u1-)clock_seq_1让一and_reserved,u2-)clock_seq二hi_and_reserved);u2-)clock_se止low)for(i = O;i ( 6;i +) if(u1-)nodei ( u2-)nodeiJ) return -1; if(u1-)nodei ) u2-)nodeiJ) return 1; w o yi z e s k C 0 1i c 飞/4 u /,、K FV E H FL return 0; # undef CHEC

39、K D. 5 sysdep. h文件# incl ude copyrt. h /祷removethe folowi呵defineif you aren7t running Windows 32养/#definW工NINC0 # ifdef WININC # include (windows. h) # else # include (time. h) # include (unistd. h) # include (sys/types. h) # include (sys/time. h) # endif # include global. h /养changeto point to wher

40、e MD5 . h7s live;IETF RFC 1321 has a s四pleimplementation养/# include md5. h 22 GB/T 17969.8-2010/ISO/IEC 9834-8 :2005 /养setthe folowing to the number of 100ns ticks of the actual resolution of your system s clock者/#defineUUIDS_PER_TICK 1024 /美setthe folowing to a call to get and release a global lock

41、养/#define LOCK # def ine UNLOCK typedef unsigned long unsigned32; typedef unsigned short unsigned16; typedef unsigne char unsignedB; typedef urtsigned char byte; /开setthis to what your compiler uses for 64-bit da仁.atype养/# ifdef WININC # define unsi伊ed64_tunsigned_int64 #defin 164(C) C #else #defin

42、unsigned64_t unsigned long long #define 164(C) C#LL #endif typedef unsigned64_ t uuid_ time_ t; typedef struct har nodeID 6J ; uuid_node_ t; void get_ieee_node_identifier(uui吃nodet 并node);void .get_syst四_time(uuid_time_t卖uuid_time);void get_random_info(unsigned char seed16J); D.6 sysdep. c文件#indude

43、opyrt.h #include (stdio.h) #include (string.h) #include sysdep. h /并systemdepi;illdent call to get MAC node identifier. This sample implementation generates a random node identifier.者/voidget_ieee_node_identitir(uuic1.二node_t养node)., e d o n d ez V丁ldfa6 0SI =t汇,d-a e但etES LO nnr l-a ;dh tic-, nup i

44、u,明白ccnu祷,lelqd ttiE aasL L+LnT4 ssuF if(! inited) fp = fopen(nodeid , rb勺;if(fp) fread伍savenode,sizeofsavenode,l,fp); 23 GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 fclose(fp) ; j else ( get_random_info(seed);seedO 1= Ox80; memcpysavenode,seed,sizeof save吃node);fp = fopen(nodeid , wb); if(fp) ( fwrite伍

45、saved_node,sizeof savenode, 1 ,fp); fclose(fp) ; j inited = 1; * node = saved_node; /养systemdependent call to get the current system time. Returned as 100ns ticks since肌JIDepoch,but resolution may be less th缸100ns.养/# ifdef_WINDOWS_ void get_system_time(uuitime_t养uutime)( ULARGE_INTEGER time; /养Wind

46、owsNT keeps time in FI皿TIMEformat which is 100ns ticks since Jan 1 ,1601. UUIDs use time in 100ns ticks since Oct 15 ,1582. The difference is 17 Days in Oct + 30 (Nov) + 31 (Dec) + 18 years皿d5 leap days.提/GetSystemTimeAsFileTime(FILETlME并)time); time. QuadPart += (unsigneint64) (100。据1000并10)/ /seco

47、nds 并(unsi伊e叫_int64)(60封60养24)/days 养(unsigneint64)(1 7 + 30 + 31 + 365先18+5);/#ofdays 养uuitime= time. QuadPart; void get_random_info(unsigned char seed16) MD5_CTX c; struct MEMORYSTATUS m; c p .,! SE E OFG MtE IEN= -MIU M-h ETED TEGR SLRo y-AW SFLD 24 GB/T 17969.8-201 O/ISO/IEC 9834-8: 2005 DWORD 1; char hostnameMAX_COMPUTERNAME_LENGTH + 1J; r; MD5Init(c) ; Globa1MemoryStatus(r.m); GetSystemlnfo(&r.s); GetSystemTimeAsFileTime(&r.t); QueryPerformanceCounter(&r.pc); r. tc = GetTickCountO; r.1 =MA汇IM

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 标准规范 > 国家标准

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1