Я хочу генерировать уникальный пароль каждый раз. Я использую этот код для генерации пароля.Почему мой код генерации пароля работает не так, как ожидалось?
import java.util.Random;
public class PasswordGenerator
{
public static String generatePassword()
{
Random r[] = new Random[8];
r[0] = new Random(1234567);
r[1] = new Random(7654321);
r[2] = new Random(-1234567);
r[3] = new Random(-7654321);
r[4] = new Random(5463721);
r[5] = new Random(2743615);
r[6] = new Random(-9753214);
r[7] = new Random(-3125769);
Random x = new Random(2325671);
StringBuilder password = new StringBuilder();
int length = x.nextInt(5)+9;
password.setLength(length);
for(int i=0;i<length;i++)
{
x.setSeed(r[i%8].nextInt(500)*r[4].nextInt(900));
password.setCharAt(i,(char)(r[x.nextInt(256)%8].nextInt(95)+32));
}
return password.toString();
}
}
код где generatePassword()
называется (, если это важно)
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == generate)
{
String userName = username.getText();
if(userName.isEmpty() || username == null)
{
JOptionPane.showMessageDialog(null,"username not entered\nFirst enter your username","ERROR",JOptionPane.ERROR_MESSAGE);
username.requestFocus();
username.selectAll();
return;
}
else if(userName.length() <=5)
{
JOptionPane.showMessageDialog(null,"Bad Username.\nUsername should be atleast six characters long.","ERROR",JOptionPane.ERROR_MESSAGE);
username.requestFocus();
username.selectAll();
return;
}
else
{
String passwd = PasswordGenerator.generatePassword();
password.setText(passwd);
return;
}
}
else if(event.getSource() == submit)
{
String passwordField = password.textField();
if(passwordField.isEmpty() || passwordField == null)
{
JOptionPane.showMessageDialog(null,"Please Generate your password first by clicking on the \"Generate\" button.",JOptionPane.ERROR_MESSAGE);
generate.requestFocus();
return;
}
else
{
//do something...
}
}
}
Каждый раз, когда он производит один и тот же пароль, даже когда я перекомпилировать его. Что я должен изменять, чтобы каждый раз генерировать уникальный пароль?
Наконец рабочий код ...
import java.util.Random;
public class PasswordGenerator
{
public static String generatePassword()
{
Random r[] = new Random[8];
for(int i=0;i<8;i++)
r[i] = new Random();
Random x = new Random();
StringBuilder password = new StringBuilder();
int length = x.nextInt(5)+9;
password.setLength(length);
for(int i=0;i<length;i++)
{
x.setSeed(r[i%8].nextInt(500)*r[4].nextInt(900));
password.setCharAt(i,(char)(r[x.nextInt(256)%8].nextInt(95)+32));
}
return password.toString();
}
}
Особые Благодаря @reimeus и тарелочки @ Джон
Ok понял. Спасибо за помощь вам обоим, теперь это работает. – cyberpirate92
hmmm SecureRandom ... ok, я буду помнить это, спасибо снова – cyberpirate92