Edit: Das war ursprünglich eine Antwort in Cyborg Codesammelstelle - #21 , aber ist wohl ein eigenes Thema wert. Das meiste CB-spezifische hier sollte man ignorieren können
Omg ist der Thread geil wenn man ne Zeitlang nichts mit dem „perfekten Code“ zu tun hat. Hab jetzt einfach mal spaßeshalber der Jetbrains AI die Aufgabe gegeben, das gleiche „Programm“ zu machen was CB uns hier in perfekter Umsetzung kostenlos zur Verfügung stellt. Und hier ist das Ergebnis:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import me.gosimple.nbvcxz.Nbvcxz;
import me.gosimple.nbvcxz.resources.Generator;
import me.gosimple.nbvcxz.resources.GeneratorOptions;
import me.gosimple.nbvcxz.scoring.Result;
public class PasswordStrengthEstimator extends JFrame {
private JTextField passwordField;
private JTextArea feedbackArea;
private JTextArea generatedPasswordsArea;
private Nbvcxz nbvcxz;
private Generator generator;
public PasswordStrengthEstimator() {
// Set up JFrame
setTitle("Password Strength Estimator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600, 400);
setLocationRelativeTo(null);
setLayout(new BorderLayout());
// Set up Nbvcxz
nbvcxz = new Nbvcxz();
GeneratorOptions options = new GeneratorOptions(8, 15); // passwords between 8 and 15 characters
generator = new Generator(options);
// Set up password input panel
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
JLabel passwordLabel = new JLabel("Password:");
passwordField = new JTextField(20);
JButton checkButton = new JButton("Check Strength");
checkButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
checkPasswordStrength();
}
});
inputPanel.add(passwordLabel);
inputPanel.add(passwordField);
inputPanel.add(checkButton);
// Set up feedback area
feedbackArea = new JTextArea(5, 50);
feedbackArea.setEditable(false);
// Set up generated passwords area
generatedPasswordsArea = new JTextArea(10, 50);
generatedPasswordsArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(generatedPasswordsArea);
// Set up generate passwords button
JButton generateButton = new JButton("Generate 25 Passwords");
generateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
generatePasswords();
}
});
// Add components to frame
add(inputPanel, BorderLayout.NORTH);
add(new JScrollPane(feedbackArea), BorderLayout.CENTER);
add(scrollPane, BorderLayout.SOUTH);
add(generateButton, BorderLayout.SOUTH);
}
private void checkPasswordStrength() {
String password = passwordField.getText();
Result result = nbvcxz.estimate(password);
feedbackArea.setText("");
feedbackArea.append("Password: " + password + "\n");
feedbackArea.append("Strength Score: " + result.getEntropy() + "\n");
feedbackArea.append("Feedback: " + result.getFeedback().getWarning() + "\n");
feedbackArea.append("Suggestions: " + String.join(", ", result.getFeedback().getSuggestions()) + "\n");
}
private void generatePasswords() {
generatedPasswordsArea.setText("");
for (int i = 0; i < 25; i++) {
String password = generator.generatePassword();
generatedPasswordsArea.append(password + "\n");
}
}
public static void main(String[] args) {
// Set Nimbus look and feel for a better appearance
try {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
// If Nimbus is not available, fall back to default
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new PasswordStrengthEstimator().setVisible(true);
}
});
}
}
Ich habs jetzt nicht ausprobiert obs funktioniert - hab ich aber auch bei CBs Code nicht (und ich würde mich hüten ein JAR von ihm herunter zu laden). Also schauen wir uns einfach mal den Code an. Also ich denke eine Gemeinsamkeit ist klar: beide Code-Schnippsel-Projekte sind nicht perfekt, verwenden Java und die lib Nbvcxz.
Aber schon auf den ersten Blick sieht man, dass die Lösung der AI deutlich sauberer ausschaut. Außerdem hat Sie ein größeres technisches Verständnis von Swing. Zu sehen z.B. an dieser Zeile:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new PasswordStrengthEstimator().setVisible(true);
}
});
Und ich muss sagen: Krass - das verändert tatsächlich mein Weltbild. Ich hätte nicht erwartet das AI (in der aktuellen Form) für einen „Entwickler“ gefährlich werden könnte, der sich seit >10 Jahren mit einem Thema „beschäftigt“. Aber doch - CB könnte man ohne Problem durch AI ersetzen ohne irgendwelche Einbußen.
Hätte man das früher gewusst, dann hätte man CBs prefekten Code hier sammeln und als Benchmark an AI-Firmen verkaufen können ^^.