首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈希德独特空间

哈希德独特空间
EN

Stack Overflow用户
提问于 2016-01-06 22:27:39
回答 2查看 1.3K关注 0票数 2

我想知道我是否遇到了一个bug,或者刚刚遇到了Hashids算法的限制。

我使用的是自定义字母表,它由所有大写字母组成,减去"O“和"I”以及数字2-9。

在生成数百万个散列后,我注意到重复项开始出现。我对此感到困惑,尤其是因为Hashids声称复制是不可能的,因为算法只是整数的十六进制版本。只要整数保持唯一(例如永远计数),散列也是如此。

自定义字母表是否使副本更有可能出现?另外,我还期望我的字母表的唯一散列数是: 32^7 = 34,359,738,368。在我的计数器点击这个数字之前,生成的哈希从7个字符长到了8个字符。

有人知道为什么会发生这种事吗?

编辑:另一个相当奇怪的异常:生成10647散列后,其余的(290万以上)要么以K或X开头,我开始认为自定义的字母加上盐的长度会影响字母的洗牌方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-13 18:44:18

我通过将字母I,O,0,1返回到正在使用的字母表来解决这个问题。随着字母表长度的增加,Hashids计算的旋转受到影响。我只是使用正则表达式筛选出任何包含I、O、0或1的输出。

票数 0
EN

Stack Overflow用户

发布于 2016-04-04 04:19:02

有同样的问题,就试试这个:

代码语言:javascript
复制
var hashids = new Hashids("BSomeoneNameN161179IBRB46", 5, "ABCDEFGHIJKLMNPQRSTUVWXYZ1234567890");

var id = hashids.encode(1234567);
var numbers = hashids.decode(id);

改变盐,删除最后5个字符一个一个,只是显示相同的结果。

制造不超过20个字符的盐似乎解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34644060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档