gpt4 book ai didi

java - Java中高效的不重复密码生成器

转载 作者:行者123 更新时间:2023-12-01 15:25:28 25 4
gpt4 key购买 nike

我已经多次访问此网站并找到了我的问题的答案,但现在终于是我发布自己的问题的时候了!因此,我的软件中特定类的目标是生成固定长度的随 secret 码,由“低”ASCII 字符组成。主要问题是我不想两次生成相同的密码,但始终保证唯一性。最初我使用了 HashMap为了对迄今为止生成的每个密码进行哈希处理,并在每次返回之前创建新密码时用作检查。然而,Java HashMap 对象的大小有限,最终 Map 会变得过于饱和,无法维持可接受的检索时间。以下是我对这个问题的最新破解:

package gen;

import java.util.Set;

import java.util.Random;

import java.util.HashSet;

public class Generator {

Random r;
int length;
Set<String> seen;

public Generator(int l){
seen = new HashSet<String>();
length = l;
r = new Random();
r.setSeed(System.currentTimeMillis());
}

public String generate(){
String retval = "";
int i = 0;
while(i<length){
int rand = r.nextInt(93)+33;
if(rand!=96){
retval+= (char)rand;
i++;
}
}
return retval;
}

public String generateNoRepeat(){
String retval;
int i;
do{
retval ="";
i = 0;
while(i<length){
int rand = r.nextInt(93)+33;
if(rand!=96){
retval+= (char)rand;
i++;
}
}
}while(!seen.add(retval));
return retval;
}
}

编辑:非常感谢您的设置建议。它现在也让我的代码变得更加干净!

我可能决定只使用哑生成器方法来填充 BlockingQueue只是多线程它死了......

进一步说明:这并不意味着生成安全密码。它必须简单地保证它最终会生成所有可能的密码,并且对于给定的长度和字符集仅生成一次。

注意:

我听取了每个人的意见,得出的结论是,顺序生成可能的密码并将其存储到磁盘可能是我的最佳选择。或者只是允许重复的密码并通过多个生成器线程补充低效率。

最佳答案

为什么不直接加密序列号?

令 n 为序列中的第一个数字(不要以零开头)。令 e 为某种加密算法(例如 RSA)。

那么您的密码是 e(n), e(n+1), e(n+2), ...

但我非常同意 Greg Hewgill 和 Ted Hopp 的观点,避免重复带来的麻烦大于其值(value)。

关于java - Java中高效的不重复密码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com