Cyborg Codesammelstelle

Moin. Ein kleines Projekt von mir, ich nenne es einfach „Password strength and generator“.

Es gibt eine kleine GUI, mit der man die Stärke seines Passworts (Entropie) überprüfen kann - oder ganz einfach 25 neue Passwörter erzeugen lassen kann.

Jar:

PasswordStrength-1.0.jar (748,9 KB)

Quelltext:

import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import me.gosimple.nbvcxz.Nbvcxz;
import me.gosimple.nbvcxz.resources.Generator;
import me.gosimple.nbvcxz.scoring.Result;

public class Main {
  public static void main(String[] args) {
    JLabel label1 = new JLabel("Enter password:");
    JTextField textField1 = new JTextField(20);
    JLabel label2 = new JLabel("Password strength:");
    JTextField textField2 = new JTextField(20);
    JLabel label3 = new JLabel("Generated password:");
    JButton button3 = new JButton("Generate password");
    JTextArea textArea3 = new JTextArea();
    fillArea(textArea3);
    textArea3.setFont(new Font("Monospaced", Font.PLAIN, 12));
    JPanel panel1 = new JPanel(new GridLayout(3, 2));
    panel1.add(label1);
    panel1.add(textField1);
    panel1.add(label2);
    panel1.add(textField2);
    panel1.add(label3);
    panel1.add(button3);
    JFrame frame = new JFrame("Password strength and generator");
    frame.add(panel1, BorderLayout.NORTH);
    frame.add(new JScrollPane(textArea3), BorderLayout.CENTER);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setVisible(true);

    textField1
        .getDocument()
        .addDocumentListener(
            new DocumentListener() {
              @Override
              public void insertUpdate(DocumentEvent e) {
                update();
              }

              @Override
              public void removeUpdate(DocumentEvent e) {
                update();
              }

              @Override
              public void changedUpdate(DocumentEvent e) {
                update();
              }

              private void update() {
                textField2.setText(resultToString(calculateStrength(textField1.getText())));
              }
            });
    button3.addActionListener(e -> fillArea(textArea3));
  }

  private static void fillArea(JTextArea area) {
    TreeMap<Double, TreeSet<String>> passwords = new TreeMap<>();
    for (int i = 0; i < 25; i++) {
      String p = generatePassword();
      Result r = calculateStrength(p);
      passwords
          .computeIfAbsent(
              r.getEntropy(),
              k ->
                  new TreeSet<>(
                      Comparator.comparingInt(String::length).thenComparing(String::compareTo)))
          .add(p);
    }
    StringBuilder sb = new StringBuilder("Generated Passwords:\n");
    int i = 1;
    for (TreeSet<String> list : passwords.values()) {
      for (String s : list) {
        sb.append(String.format("%02d. ", i++))
            .append(s)
            .append(" - ")
            .append(resultToString(calculateStrength(s)))
            .append("\n");
      }
    }
    area.setText(sb.toString());
    area.setCaretPosition(0);
  }

  private static Result calculateStrength(String password) {
    // With all defaults...
    Nbvcxz nbvcxz = new Nbvcxz();
    return nbvcxz.estimate(password);
  }

  private static String resultToString(Result result) {
    return String.format("%d/%f", result.getBasicScore(), result.getEntropy());
  }

  private static final Random RANDOM = new Random();

  private static String generatePassword() {
    int len = RANDOM.nextInt(5) + 12;
    return Generator.generateRandomPassword(Generator.CharacterTypes.ALPHANUMERIC, len);
  }
}

@Marco13 Bekomm’ ich vielleicht eine eigene Kategorie?

1 „Gefällt mir“