首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何生成4-7个字符的唯一密钥

如何生成4-7个字符的唯一密钥
EN

Stack Overflow用户
提问于 2012-12-17 02:29:20
回答 2查看 228关注 0票数 1

我需要为抽奖生成大量的代码,代码应该不会太长,因为我们不希望用户在网站上输入代码时有困难,我怎么知道我的算法需要多少代码才能再次重复代码?我该如何生成代码呢?代码可以是数字和字母。

EN

回答 2

Stack Overflow用户

发布于 2012-12-17 02:36:59

大写和小写字母和数字,删除容易混淆的字母和数字,例如0OoI1l,给你56个不同的字符。对于长度为x的代码,您可以得到x个可能组合的幂的56。

四个字符表示9834496种不同的组合。

七个字符表示1727094849536种不同的组合。

要挑选保证唯一的随机组合,您只需保留您以前创建的所有组合,并根据它们检查每个新组合。

票数 3
EN

Stack Overflow用户

发布于 2012-12-17 11:51:57

你可以从最大值开始,而不是从0开始。您首先需要确定哪些字符将组成您的列表,并使用该列表创建一个大小为m的查找表。

创建一个随机素数p。然后使用一个从最大值n=c ** m - 1开始的生成器,其中c是每个代码的字符数,然后关键字是k=n%p。然后将其转换为以m为基数的数字,这将允许使用查找表来创建字符串。

然后只需生成所需的所有代码,或者根据需要通过生成器函数生成代码,或者一次性生成所有代码。不过,您可能希望将n减少randomBetween(n /(剩余代码数)/2,n/(剩余代码数))或类似的值,而不是仅将其减少1,这可能允许简单地通过蛮力来确定p和/或n。这也意味着您可能不应该使用最大值作为键。

只要p比所需的代码数大得多,只要p保持不变,它就不会重复。只要没有人知道p是什么,它也可以是密码安全的。虽然p可能需要保持较小,以避免任何重复的机会,但p应该是一个实际的素数,而不是一个可能的素数,因此需要更多的指数时间来确保p是素数。但是,一旦生成了密钥,最坏情况下,生成每个密钥都应该是多项式的。尽管一次生成所需的所有密钥可能更好(如果需要,可以创建额外的密钥),存储它们,然后根据需要分发它们。这样,您可以确保密钥是唯一的,以防某些原因导致密钥生成器失败,从而强制创建p的第二个值,或者存储p的原始值,从而使p的值更有可能为人所知,尽管如果您不存储实际的有效密钥,则需要存储p(连同n)。

限制密钥的使用次数或将其归于帐户,将有助于避免黑客只需找到一个密钥然后将其分发的问题。

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

https://stackoverflow.com/questions/13904264

复制
相关文章

相似问题

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