我想知道我是否遇到了错误,或者只是遇到了 Hashids 算法的限制。
我正在使用自定义字母表,它由所有大写字母组成,减去“O”和“I”以及数字 2 - 9。
在生成数百万个哈希后,我注意到重复项开始出现。我对此感到困惑,特别是因为 Hashids 声称重复是不可能的,因为该算法只是整数的十六进制版本。只要整数保持唯一(例如永远计数),散列也将保持唯一。
自定义字母表是否更容易出现重复?此外,我预计我的字母表的唯一哈希数为:32^7 = 34,359,738,368。在我的计数器达到这个数字之前,生成的 hashids 从 7 个字符长增加到 8 个。
有没有人知道为什么会这样?
编辑:另一个相当奇怪的异常情况:在生成 10647 个哈希之后,其余的(290 万加)要么以 K 或 X 开头。我开始认为自定义字母表加上盐的长度会影响字母的洗牌方式。