【发布时间】:2022-04-20 01:36:56
【问题描述】:
我们正在使用 MySQL 并开发一个应用程序,我们不希望 ID 序列公开可见……ID 几乎不是最高机密,如果有人确实能够解码它们,也没有什么重大问题。
所以,哈希当然是显而易见的解决方案,我们目前正在使用 MD5... 32 位整数进入,我们将 MD5 修剪为 64 位,然后将其存储。但是,我们不知道当您像这样修剪时发生碰撞的可能性有多大(特别是因为所有数字都来自自动增量或当前时间)。我们目前检查冲突,但由于我们可能一次插入 100.000 行,因此性能很差(无法批量插入)。
但最后,我们真的不需要哈希提供的安全性,它们会消耗不必要的空间,还需要额外的索引……那么,有没有简单且足够好的函数/算法可以保证任何数字的一对一映射,没有明显的顺序数字视觉模式?
编辑:我使用的是默认情况下不支持整数运算的 PHP,但环顾四周后,我发现它可以通过位运算符廉价地复制。 32位整数乘法的代码可以在这里找到:http://pastebin.com/np28xhQF
【问题讨论】:
-
有无数个函数可以保证 1:1 映射。
-
@Wooble,那么我想你应该能够很容易地回答这个问题;-)
-
棘手的部分是,现在当您在 SO 上提出问题时,我们提供的任何答案都需要抵抗我们在此处给出的答案;-)
-
@Wooble 我们说的是 32 位整数,所以只有 (2^32)! 1:1 映射。
标签: math hash cryptography