Skip to content
Advertisement

What namespace does the JDK use to generate a UUID with nameUUIDFromBytes?

The Sun/Oracle JDK exposes a function to create a type 3 (name based) UUID in the java.util package: java.util.UUID.nameUUIDFromBytes(byte[] name).

I need to be able to generate a type 3 UUID in Java using nameUUIDFromBytes and arrive at the same UUID when creating a type 3 UUID in another language, assuming I provide the same bytes as the source.

According to the javadocs this function creates a RFC 4122 compliant type 3 UUID. However, according to the RFC 4122 spec, a type 3 UUID must be created within some namespace. Most other languages allow you specify the namespace when creating a type 3 UUID (e.g. the UUIDTools gem in Ruby).

So my question is: what namespace UUID is used by the JDK when I invoke nameUUIDFromBytes?

Advertisement

Answer

See this bug report

Especially the comment, near the bottom:

Perhaps the course of action at this point would be to fix the javadoc stating “nameUUIDFromBytes(byte[] namespaceAndName) “one should pass-in a byte array containing the concatenation of the namespace UUID’s bytes and the name bytes (in that order)” That’s assuming the method just MD5’s the byte[] and sets the fields as per the IETF document.

I don’t know if i trust this to work correctly, but it should be easy to test using the predefined namespeces from the UUID spec, comparing with same UUID generated by some other implementation.

[Edit 2022-05-22: fixed link to working Java bug database, though the new bug database doesn’t include the comments from the previous database, notably the one quoted in this answer ]

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement