Хорошо, если вы хотите узнать, насколько случайным является UUID, вы должны посмотреть на источник.
Следующий фрагмент кода взят из OpenJDK7 (и он идентичен OpenJDK6 ):
public static UUID randomUUID() {
SecureRandom ng = numberGenerator;
if (ng == null) {
numberGenerator = ng = new SecureRandom();
}
byte[] randomBytes = new byte[16];
ng.nextBytes(randomBytes);
randomBytes[6] &= 0x0f; /* clear version */
randomBytes[6] |= 0x40; /* set to version 4 */
randomBytes[8] &= 0x3f; /* clear variant */
randomBytes[8] |= 0x80; /* set to IETF variant */
return new UUID(randomBytes);
}
Как видите, только 2 из 16 байтов не являются полностью случайными.В шестом байте вы теряете 4 из 8 битов, а в байте 8 вы теряете 2 бита случайности.
Поэтому вы получите 128-битное значение с 122-битной случайностью.
Единственная проблема, которая может возникнуть в результате манипуляции, заключается в том, что с высокой вероятностью ваши данные могут быть идентифицированы как UUID.Поэтому, если вы хотите скрыть это в других случайных данных, это не сработает ...