Java UUID到CRC32的转换和可能的冲突

Java UUID到CRC32的转换和可能的冲突,java,uuid,crc32,Java,Uuid,Crc32,我要将UUID转换为CRC32,类似这样: public static long crc32(String input) { byte[] bytes = input.getBytes(); Checksum checksum = new CRC32(); checksum.update(bytes, 0, bytes.length); return checksum.getValue(); } String uuid1 = UUID.randomUUID()

我要将UUID转换为CRC32,类似这样:

public static long crc32(String input) {
    byte[] bytes = input.getBytes();
    Checksum checksum = new CRC32();
    checksum.update(bytes, 0, bytes.length);

    return checksum.getValue();
}

String uuid1 = UUID.randomUUID().toString;
String uuid2 = UUID.randomUUID().toString;

long crc32_1 = crc32(uuid1);
long crc32_2 = crc32(uuid2);

如果uuid1和uuid2有100%的差异,crc32和crc32是否有可能相等。两个不同UUID的CRC相等的几率为232分之一。只有77164个UUID,其中两个有50%的可能性具有相同的CRC-32。

CRC32具有32位的熵(我说的对吗?),而UUID具有128位,因此必然会发生冲突。平均而言,4个不同的UUID散列到一个相同的CRC32。但这是一个清晨无知的猜测。您尝试了什么?我将在我的web应用程序url中将代理ID作为参数公开。。但是一个普通的4 UUID看起来很糟糕。。像这样的东西-我想减少这个id,不要失去唯一性,你不能有你的蛋糕和吃它。如果我们简化:假设您希望使用大量(>10)不同的数字,但仅使用一位数字(0-9)表示它们。冲突(多个源编号映射到一个目标编号)是否可以避免?是。。你是对的。。我认为另一个可能的选择是将UUID转换为Base64@CodeCaster实际上,2^96个UUID映射到每个CRC-32值。不是四个。所以你基本上是对的,只是你的偏离系数是198070406285666084398385987584.:-)