当前位置:  开发笔记 > 前端 > 正文

如何生成一个独特,小巧,随机且用户友好的密钥?

如何解决《如何生成一个独特,小巧,随机且用户友好的密钥?》经验,为你挑选了1个好方法。

几个月前,我的任务是为我们的Web应用程序实现一个独特的随机代码.代码必须是用户友好的并且尽可能小,但仍然基本上是随机的(因此用户无法轻易预测序列中的下一个代码).

它最终生成的值看起来像这样:

Af3nT5Xf2

不幸的是,我对实施从未满意.Guid是不可能的,它们对于用户来说太大而且难以输入.我希望能够提供更多的4或5个字符/数字的内容,但是如果我们编码为的话,我们的特定实现会生成明显的图案序列少于9个字符.

这是我们最终做的事情:

我们从数据库中提取了一个唯一的顺序32位id.然后我们将它插入64位RANDOM整数的中心位.我们创建了一个易于键入和识别的字符的查找表(AZ,az,2-9跳过容易混淆的字符,如L,l,1,O,0等).最后,我们使用该查找表对64位整数进行base-54编码.高位是随机的,低位是随机的,但中心位是顺序的.

最终结果是一个比guid小得多的代码并且看起来是随机的,即使它绝对不是.

我对此特定实现从未满意.你们会做什么?



1> chakrit..:

我就是这样做的.

我将获得一个常用英语单词列表,其中包含使用频率和一些语法信息(如名词或动词?).我想你可以看看intertubes周围的一些副本.Firefox是开源的,它有一个拼写检查程序......所以它必须以某种方式获得.

然后我会在其上运行一个过滤器,这样就可以删除模糊的单词并排除那些太长的单词.

然后我的生成算法将从列表中选择2个单词并连接它们并添加一个随机的3位数字.

我也可以在动词/名词之间随机化单词选择模式

eatCake778
pickBasket524
rideFlyer113等.

案件不一定是驼峰套管,你也可以随机化.您还可以随机化数字和动词/名词的位置.

而且由于这是很多随机化,杰夫的Naïveté的危险是必读的.还要确保提前学习字典攻击.

在我实现它之后,我会进行测试以确保我的算法永远不会发生碰撞.如果碰撞率很高,那么我会玩参数(使用的名词数量,使用的动词数量,随机数的长度,单词总数,不同类型的外壳等)

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有