Unit testing UUID版本5(将哈希转换为guid)生成算法的测试向量?

Unit testing UUID版本5(将哈希转换为guid)生成算法的测试向量?,unit-testing,testing,uuid,Unit Testing,Testing,Uuid,我试图找到一些测试向量来检查我的实现 4.3创建基于名称的UUID的算法 UUID的版本3用于将MD5哈希放入GUID中 UUID的版本5用于将SHA1哈希放入GUID中 RFC具有C中的示例实现: void uuid_create_sha1_from_name( uuid_t *uuid, /* resulting UUID */ uuid_t nsid, /* UUID of the namespace */ void *name,

我试图找到一些测试向量来检查我的实现

4.3创建基于名称的UUID的算法

UUID的版本3用于将MD5哈希放入GUID中

UUID的版本5用于将SHA1哈希放入GUID中

RFC具有C中的示例实现:

void uuid_create_sha1_from_name(
   uuid_t *uuid,         /* resulting UUID */
   uuid_t nsid,          /* UUID of the namespace */
   void *name,           /* the name from which to generate a UUID */
   int namelen           /* the length of the name */
);
我已经用我正在使用的语言编写了自己的实现。考虑到endian vs network order带来的麻烦,我确信我的实现是错误的

我想要一些样本数据,例如:

uuid = NameToGUID(
      {6ba7b811-9dad-11d1-80b4-00c04fd430c8}, //Namespace_URL
      "https://stackoverflow.com/questions/5515880"); //a url
CheckEquals(
      {8ABAD867-F515-3CF6-BB62-5F0C88B3BB11}, //expected uuid
      uuid);
另见
政府为
www.example.org
举了一个例子:

6ba7b810-9dad-11d1-80b4-00c04fd430c8 // namespace UUID
www.example.org                      // url
74738ff5-5367-5958-9aee-98fffdcd1876 // expected UUID
除此之外,Java还提供了一个可用于生成测试数据的方法。(编辑:这似乎只能生成版本1、2、3和4 UUID。)

您链接的问题中提到了一些可以生成版本3/5 UUID的库:

外面似乎有一些图书馆 没有用于生成版本3/5的文件 UUID,包括 模块,(C++)和 乌伊德。(我没有找任何.net 一)


操作编辑

DE wikipedia上的示例有一个小错误:

  • 它声称正在使用
    DNS
    name
    www.example.org
  • 给定的ASCII字节序列用于
    www.example.com
  • 但是SHA1散列使用的是
    www.example.org
我将编辑页面以更改字节顺序,从
0x63 0x6f 0x6d
“com”

0x6f 0x72 0x67
“组织”

但我不会说德语,不想创建一个帐户,而且我实在太懒了

这个例子可以归结为

Namespace_DNS: {6ba7b810-9dad-11d1-80b4-00c04fd430c8}
Name:          "www.example.org"
连接字节序列:

Bytes:         6b a7 b8 10 9d ad 11 d1 80 b4 00 c0 4f d4 30 c8   {6ba7b810-9dad-11d1-80b4-00c04fd430c8}
               77 77 77 2e 65 78 61 6d 70 6c 65 2e 6f 72 67      "www.example.org"
使用SHA1散列字节序列,并将其大部分直接复制到UUID中:

SHA1 Digest:   74738ff5 5367 e958 9aee98fffdcd187694028007
UUID (v5):     74738ff5-5367-5958-9aee-98fffdcd1876
                             ^    ^
并注意将一个半字节转换为
5
(表示版本5)。

另一个字节的前2位被设置为二进制
10xxxxxx

,据我所知,Java UUID类不支持版本5,仅支持1-4,甚至只支持JDK6,因为在此之前,您没有获得MAC的本机JDK方法address@Asaf:是的,我一提出就看到了。删除部分以使其更清晰。@Ian:谢谢你发现了这一点,我将编辑维基百科页面。