确定性GUID / UUID生成的Java / .NET实现

时间:2012-10-05 19:32:42

标签: java .net guid uuid

我试图在Java中复制以下.NET代码

https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/GuidUtility.cs

我在Java中编写了等效的代码,但是我得到了最终GUID / UUID

的不同值

我为Java所做的更改 - 要将UUID转换为字节数组(上面代码中的步骤3),我使用了以下内容 - GUID to ByteArray

    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(namespaceId.getMostSignificantBits());
    bb.putLong(namespaceId.getLeastSignificantBits());
    byte[] namespaceBytes = bb.array()

对于散列部分(步骤4),我使用apache-commons message-digest类

    final MessageDigest sha = MessageDigest.getInstance("SHA-1");
    final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    outputStream.write(namespaceBytes);
    outputStream.write(nameBytes);
    sha.update(outputStream.toByteArray());
    final byte[] hash = sha.digest();

其余代码完全相同。

然而,经过这里发布的关于Java的签名字节数组和.NET的无符号字节的其他问题。我记录了每个点的输出,我没有看到这两个步骤的输出有任何相似之处。

通过几个线程阅读后,我意识到GUID.toByteArray()方法的工作方式与我在java中转换值的方式不同。 .NET中的字节数组也是无符号的,这是Java不支持的类型。如何修复代码以使其适用于Java?

0 个答案:

没有答案