有没有地方可以将 UUID 压缩/转换/编码/加密为无符号整数?
我从 sql 表中读取 UUID,历史记录很难看,我无法更改...我只有一个 unsigned int 来存储它。这是 C++,以防产生影响
对此有什么想法吗?
谢谢
礼萨
正如其他人所说,你will将 128 位 UUID 转换为更窄的整数类型时丢失信息。
如果您想保证唯一性——毕竟,这就是 UUID 的用途,您可能只需考虑将信息保留为 UUID 格式。
如果您可以满足较低的冲突可能性(两个不同的 UUID 映射到同一整数),则可以尝试以下几种方法。
尽可能使用大的整数类型。如果您的编译器支持无符号 64 位整数类型(unsigned long long
或者无论微软如何称呼它),使用它。
xor
计算 UUID 的上半部分和下半部分 64 位应该会给出一个相当不错的哈希值。
如果 UUID 值中存在某种顺序(非随机性、可预测性),导致其不合适,则可以计算 md5 或 sha-1 哈希值并丢弃除 64 位以外的所有值。丢弃哪些部分并不重要。
如果您仅限于 32 位整数,您可以xor
UUID 的四个 32 位四分之一放在一起,或者丢弃除 32 位之外的所有 md5 或 sha-1 哈希值。
请注意,对于 32 位整数,您可能会在前两个样本上发生冲突,但这不太可能。如果样本数量位于可能性总数的平方根附近,则碰撞的可能性会上升到大约 50%,因此,如果您有 100,000 个随机 32 位数字,则很可能其中两个相同。请参阅生日悖论 http://en.wikipedia.org/wiki/Birthday_problem.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)