2017-04-27 2 views
0

So muss ich wissen, gibt es eine Möglichkeit, das endgültige Passwort dieses Codes zu jTextField-Steuerelement zu zeigen, weil, als ich versuchte, ich habe Problem char konnte nicht in String konvertieren.Java Random Password Generator Problem

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' gibt einen' char', wenn Sie eine Zeichenfolge Verwendung ' "" + char' oder etwas Gleichwertiges –

+1

nicht pseudo-Zufallsgeneratoren Verwenden Sie wollen, wo Sicherheit wichtig ist . Ihr Verhalten ist deterministisch und kann zu Sicherheitslecks führen. – gonczor

+0

Was versuchst du zu tun, wie funktioniert es nicht? – khelwood

Antwort

1

In Ihrem Code generieren Sie gerade die Buchstaben zufällig und drucken es. Sie müssen ein String aus all diesen generierten Zeichen bilden und dann können Sie es als Text in einem TextField setzen.

Sie können eine StringBuilder haben, die mit jedem zufälligen character angehängt wird.

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); 

Angenommen, Sie haben ein JTextField dann können Sie dort einstellen password_str als Wert.

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

'Random' sollte nicht für die Passwortgenerierung verwendet werden. – gonczor

+0

@gonczor Ich habe die Fehler @SteveYo hingewiesen hat Und das ist, was in der Frage gefragt. Er fragte nicht, wie man ein sichereres Passwort erzeugen könnte. Und ich sagte mir, dass dieses '50' lange Passwort eine gute Sicherheit bietet! –

+1

Die Länge eines Passworts hat nichts mit Sicherheit zu tun, wenn Sie die Sequenz vorhersagen können. Und welcher Ansatz besteht darin, dass Sie einen Code mit solchen Sicherheitsrisiken belassen können, nur weil jemand nicht darum gebeten hat, diesen Teil zu überprüfen? – 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

Bitte verwenden Sie ['SecureRandom'] (http: // docs .oracle.com/javase/8/docs/api/java/security/SecureRandom.html) zur Passwortgenerierung. –

+0

@ OleV.V. Ja: SecureRandom ist viel besser –

0

Wenn Sie sicheres Zufalls-generiertes Passwort verwendet SecureRandom mit dem richtigen methdos zu schaffen versuchen. Bitte beziehen Sie sich auf this. Ich habe keine Artikel darüber in Englisch, aber wenn Sie mit einem Übersetzer auskommen könnten, lesen Sie bitte this one, um zu sehen, wie man einen solchen Algorithmus hacken kann.

EDIT:

More on difference between Random and SecureRandom