2017-04-27 166 views
0

所以我需要知道是否有一种方法来显示此代码的最终密码jTextField控制,因为当我尝试我得到问题char不能转换为字符串。Java随机密码生成器问题

import java.util.Random; 

Random r = new Random(); 

String alphabet = "qwertyuiopasdfghjklzxcvbnm"; 
for (int i = 0; i < 50; i++) { 
    System.out.println(alphabet.charAt(r.nextInt(alphabet.length()))); 
} 
+0

'charAt'返回'char',如果你想有一个字符串使用'“” + char'或等价的东西 – 2017-04-27 11:03:55

+1

不要用伪随机生成,其中安全性是非常重要的。他们的行为是确定性的,可能导致安全漏洞。 – gonczor

+0

你在做什么?它怎么不起作用? – khelwood

回答

1

当前在您的代码中,您只是随机生成字符并打印它。您需要从所有这些生成的字符中形成String,然后您可以将其设置为TextField中的文本。

你可以有一个StringBuilder它随每个随机character追加。

String alphabet = "qwertyuiopasdfghjklzxcvbnm"; 
StringBuilder password=new StringBuilder(); 

for (int i = 0; i < 50; i++) { 
    password.append(alphabet.charAt(r.nextInt(alphabet.length()))); 
} 
String password_str=password.toString(); 
System.out.println(password_str); 

假设你有一个JTextField那么你可以设置有password_str作为其值。

JTextField password_field = new JTextField(); 
password_field.setText(password_str); 
+1

'Random'不应该用于密码生成。 – gonczor

+0

@gonczor我指出了@SteveYo所犯的错误而这就是问题所在。他没有问'如何生成更安全的密码'而我据我说,这个'50'字母长的密码确实提供了很好的安全性! –

+1

如果您可以预测顺序,密码的长度与安全无关。有什么方法可以让代码具有这样的安全风险,仅仅是因为有人没有要求检查这部分? – gonczor

1
Random r = new Random(); 

    String alphabet = "qwertyuiopasdfghjklzxcvbnm"; 
    StringBuilder buf = new StringBuilder(); 
    for (int i = 0; i < 50; i++) { 
     buf.append(alphabet.charAt(r.nextInt(alphabet.length()))); 
    } 
    jTextField.setText(buf.toString()); 
+0

请使用['SecureRandom'](http:// docs .oracle.com/javase/8/docs/api/java/security/SecureRandom.html)来生成密码。 –

+0

@ OleV.V。是的:SecureRandom要好得多 –