我这里的代码只设法随机化长度,我需要在我的类createPassword中随机化字符串。但是不存在随机化字符串,只有整数的方法。有人有什么建议吗?
主要:
public class Program {
public static void main(String[] args) {
PasswordRandomizer randomizer = new PasswordRandomizer(13);
System.out.println("Password: " + randomizer.createPassword());
System.out.println("Password: " + randomizer.createPassword());
System.out.println("Password: " + randomizer.createPassword());
System.out.println("Password: " + randomizer.createPassword());
}
}
班级:
import java.util.Random;
public class PasswordRandomizer {
private Random random = new Random();
private int length;
public PasswordRandomizer(int length) {
this.length=length;
random = new Random();
}
public String createPassword() {
String alphabet = "abcdefghijklmnopqrstuvwxyz";
int randomCharIndex = random.nextInt(length);
String randomstr = alphabet.substring(randomCharIndex);
return randomstr;
}
}
示例输出:
Password: ghijklmnopqrstuvwxyz
Password: lmnopqrstuvwxyz
Password: jklmnopqrstuvwxyz
Password: ijklmnopqrstuvwxyz
答案 0 :(得分:2)
这样可以正常工作:
public String createPassword() {
StringBuilder pass = new StringBuilder();
Random r = new Random();
for(int i = 0 ; i < length ; i++) {
pass.append( (char)('a' + r.nextInt('z'-'a')) );
}
return pass.toString();
}
我们的想法是利用char
可以用作int
并转换回char
(并且字母字符在ASCII代码中是连续的)。所以你用它来得到一个随机的字符:
minimumValue + random.nextInt(MaxValue-MinValue)
答案 1 :(得分:0)
您可以使用Collections.shuffle()
随机播放列表。你可以使用相同的方法来改变字符串中的字符。看看下面的代码。此代码将在每次执行时返回给定字符串的唯一随机字符串。
List<String> list = new ArrayList<>(Arrays.asList("abcdefghijklmnopqrstuvwxyz".split("")));
Collections.shuffle(list);
String randomString = list.stream().collect(Collectors.joining()); // Java 8
如果你需要的只是一些随机字符,那么为了安全起见,你应该使用某种散列。可能是您可以使用UUID.randomUUID()
获取随机值,然后您可以对其进行散列以获得始终唯一的字符串。
答案 2 :(得分:0)
public String getPassword(int no) {
String inputChars= "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
StringBuilder salt = new StringBuilder();
Random rnd = new Random();
while (salt.length() < no) {
int index = (int) (rnd.nextFloat() * inputChars.length());
salt.append(inputChars.charAt(index));
}
String password= salt.toString();
return password;
}
但我建议使用java.security.SecureRandom;
e.g。
private SecureRandom random = new SecureRandom();
public String nextSessionId() {
return new BigInteger(130, random).toString(32);
}
更安全的密码生成方式