[Java] Passwort Generator

Dieses Thema im Forum "Projekte / Codes" wurde erstellt von frankred, 15. März 2009 .

  1. 15. März 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Passwort Generator

    Servus Leute habe es nun endlich geschafft mein 2. Projekt zu releasen. Es handelt sich um einen Passwortgenerator
    Features
    • Passwortlänge
    • Zahlen
    • Großbuchstaben
    • Kleinbuchstaben
    • Sonderzeichen
    • zusätzliche Zeichen
    • Anzahl
    Screenshot
    Bild
    {img-src: http://passwort-generator.mynotiz.de/passwortGenerator_screenshot.gif}

    Download
    http://rapidshare.com/files/209074558/PasswortGenerator_Version_1.0.jar.html

    Quellcode
    Code:
    package applikation;
    
    import info.clearthought.layout.TableLayout;
    
    import java.awt.Checkbox;
    import java.awt.Container;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.Collection;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    
    public class PasswortGenerator extends JFrame {
    
     private static final long serialVersionUID = 1L;
    
     JLabel labelLength;
     JTextField textFieldLength;
     JLabel labelAmount;
     JTextField textFieldAmount;
    
     JLabel labelSymbols;
     JPanel panelCheckboxes;
     Checkbox checkboxNumbers;
     Checkbox checkboxLetterUppercase;
     Checkbox checkboxLetterLowercase;
     Checkbox checkboxSpecialCharacter;
    
     JLabel labelAdditionalCharacter;
     JTextField textFieldAdditionalCharacter;
    
     JTextArea textAreaPasswords;
     JButton buttonGenerate;
     JButton buttonClear;
    
     JLabel copyright;
    
     Thread doit;
    
     // Passwort Parameter
     int length;
     int amount;
     boolean numbers;
     boolean letterUppercase;
     boolean letterLowercase;
     boolean specialCharacter;
     String additionalCharacter;
     char charsAdditionalCharacter[];
    
     public PasswortGenerator() {
     Toolkit.getDefaultToolkit().getSystemEventQueue().push(new TCPopupEventQueue());
    
     Container contentPane = getContentPane();
     
     Font fontTextArea = new Font("Courier", Font.PLAIN, 12);
    
     labelLength = new JLabel(" Länge: ");
     textFieldLength = new JTextField("8");
     labelAmount = new JLabel(" Anzahl: ");
     textFieldAmount = new JTextField("5");
    
     labelSymbols = new JLabel(" Zeichen: ");
    
     checkboxNumbers = new Checkbox("Zahlen");
     checkboxNumbers.setState(true);
     panelCheckboxes = new JPanel(new GridLayout(1, 4));
     panelCheckboxes.add(checkboxNumbers);
    
     checkboxLetterUppercase = new Checkbox("Großbuchstaben");
     checkboxLetterUppercase.setState(true);
     panelCheckboxes.add(checkboxLetterUppercase);
    
     checkboxLetterLowercase = new Checkbox("Kleinbuchstaben");
     checkboxLetterLowercase.setState(true);
     panelCheckboxes.add(checkboxLetterLowercase);
    
     checkboxSpecialCharacter = new Checkbox("Sonderzeichen");
     panelCheckboxes.add(checkboxSpecialCharacter);
    
     labelAdditionalCharacter = new JLabel(" Zusätzliche Zeichen(optional): ");
     textFieldAdditionalCharacter = new JTextField("?!");
    
     textAreaPasswords = new JTextArea("");
     textAreaPasswords.setFont(fontTextArea);
     
     buttonGenerate = new JButton("generieren");
     buttonClear = new JButton("löschen");
    
     /* Tablelayout Größen {Spalte, Reihe} */
     double size[][] = { { 0.25, 0.75 }, { 24, 24, 24, 24, 48, 0.99, 24 } };
     contentPane.setLayout(new TableLayout(size));
    
     contentPane.add(labelLength, "0,0");
     contentPane.add(textFieldLength, "1,0");
    
     contentPane.add(labelSymbols, "0,1");
     contentPane.add(panelCheckboxes, "1,1");
    
     contentPane.add(labelAdditionalCharacter, "0,2");
     contentPane.add(textFieldAdditionalCharacter, "1,2");
    
     contentPane.add(labelAmount, "0,3");
     contentPane.add(textFieldAmount, "1,3");
    
     contentPane.add(buttonGenerate, "0,4,1,4");
     contentPane.add(new JScrollPane(textAreaPasswords), "0,5,1,5");
    
     copyright = new JLabel("Version 1.0 - (c) - by Frank Roth - http://passwort-generator.mynotiz.de");
     contentPane.add(copyright, "0,6,1,6");
    
     // contentPane.add(ddlWarezLinkLabel, "0,0");
     // contentPane.add(ddlWarezLink, "1,0");
    
     buttonGenerate.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     // Passwörter Generieren
     startGenerating();
     }
     });
    
     buttonClear.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     // Passwörter löschen
     }
     });
     }
    
     public void startGenerating() {
     doit = new Thread() {
     public void run() {
    
     try{
     if (!textFieldLength.getText().equals("")){
     length = Integer.parseInt(textFieldLength.getText());
     }
     if (!textFieldAmount.getText().equals("")){
     amount = Integer.parseInt(textFieldAmount.getText()); 
     }
    
     numbers = checkboxNumbers.getState();
     letterUppercase = checkboxLetterUppercase.getState();
     letterLowercase = checkboxLetterLowercase.getState();
     specialCharacter = checkboxSpecialCharacter.getState();
    
     Collection<Character> characters = new ArrayList<Character>();
    
     if (numbers){
     for(int i = 48; i <= 57; i++){
     characters.add((char)i);
     }
     }
     
     if (letterUppercase){
     for(int i = 65; i <= 90; i++){
     characters.add((char)i);
     } 
     }
     
     if (letterLowercase){
     for(int i = 97; i <= 122; i++){
     characters.add((char)i);
     } 
     }
     
     if (specialCharacter){
     for(int i = 33; i <= 47; i++){
     characters.add((char)i);
     } 
     for(int i = 58; i <= 64; i++){
     characters.add((char)i);
     } 
     for(int i = 91; i <= 96; i++){
     characters.add((char)i);
     } 
     for(int i = 123; i <= 126; i++){
     characters.add((char)i);
     } 
     }
     
    
     if (!textFieldAdditionalCharacter.getText().equals("")){
     additionalCharacter = textFieldAdditionalCharacter.getText(); 
     if (!additionalCharacter.equals("")) {
     charsAdditionalCharacter = additionalCharacter.toCharArray();
     for (int i = 0; i <= charsAdditionalCharacter.length - 1; i++){
     characters.add(charsAdditionalCharacter[i]); 
     }
     }
     }
     
     int characterAmount = characters.size();
     
     if (characterAmount != 0){
     if (amount != 0 && length != 0){
     StringBuffer chars = new StringBuffer();
     for (Character c : characters){
     chars.append(c);
     }
     char [] pwChars = chars.toString().toCharArray();
     StringBuffer password = new StringBuffer();
     
     for (int j = 1; j <= amount; j++){
     for (int i = 1 ; i <= length; i++){
     int random = (int)(Math.random()* ((characterAmount - 1) + 1) + 1);
     password.append(pwChars[random - 1]);
     }
     password.append("\n");
     }
     textAreaPasswords.setText(password.toString()); 
     }else{
     JOptionPane.showMessageDialog(null,"Bitte füllen sie alle Pflichtfelder vollständig aus!","Fehlermeldung", JOptionPane.CANCEL_OPTION);
     }
     }else{
     JOptionPane.showMessageDialog(null,"Bitte wählen sie Zeichen aus!","Fehlermeldung", JOptionPane.CANCEL_OPTION);
     }
     
     }catch (NumberFormatException formatException) {
     JOptionPane.showMessageDialog(null,"Bitte nur Zahlen eingeben!","Fehlermeldung", JOptionPane.CANCEL_OPTION);
     }
     }
     };
     doit.start();
     }
     
     
     public static void main(String[] args) {
     final Thread go = new Thread() {
     public void run() {
     PasswortGenerator passwordGenerator = new PasswortGenerator();
     passwordGenerator.setSize(750, 400);
     passwordGenerator.setVisible(true);
     passwordGenerator.setTitle("Passwort Generator (c) by Frank Roth - 2009 ");
     passwordGenerator.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
     }
     };
     go.start();
     }
    }
    Über Verbesserungsvorschläge würde ich mich sehr freuen. Will daraus ein mächtigen PW Generator machen? Wie könnte ich das anstellen?
     
  2. 16. März 2009
    AW: Passwort Generator

    Kennst du das Prinzip der Pseudozufallszahlen? Das heißt man kann theoretisch keine Zufallszahlen erzeugen, die wirklich absolut zufällig sind. Deswegen ist es oft nicht einfach starke Passwörter herzustellen. Ich würde dir allerdings raten, dass du bei deinem Programm, folgender Abschnitt:

    Code:
    for (int j = 1; j <= amount; j++){
     for (int i = 1 ; i <= length; i++){
     int random = (int)(Math.random()* ((characterAmount - 1) + 1) + 1);
     password.append(pwChars[random - 1]);
     }
     password.append("\n");
     }
    
    Hier nutzt du nämlich Math.random(). Ich würde zusätzlich vorschlagen, dass du hier selbst noch die Unixzeit aus Java herausnimmst und damit weiter experimentierst.

    Ich habe das leider nicht mehr im Kopf, aber mit einem klick hier wirst du sicher fündig: Link

    Ich bin gerade irgendwie auf einem Koffeinrausch und kann das daher irgendwie nicht, aber würdest du eventuell deine Zufallsberechnungsmethode mathematisch irgendwie fassen? Dann können wir genau sehen wie effektiv das ist und wo es verbessert werden kann.
     
  3. 16. März 2009
    AW: Passwort Generator

    Die ganze Zufallsberechnung steckt eigentlich nur in "Math.random()". Diese Methode erzeugt eine zahl zwischen 0.0000000000000000 bis 0.9999999999999999. Durch Multiplikation und addition kann man bestimmte Wertebereiche bestimmen
    z.B.:

    Generiert eine Zahl zwischen maximum und minimum.

    (int)(Math.random()* ((maximum- minimum) + 1) + minimum)

    Bei meinem Programm verwende ich den ASCII Code um meine Zahlen/Zeichen zu erzeugen.
    So ist zum Beispiel der ASCII Code von 48 bis 57 die Zahlen 012345679.
    ASCII Code 65 bis 90 sind alle Großbuchstaben von A-Z.... usw....

    Diese Aussage kann ich nicht ganz nachvollziehen 8o

    Trotzdemdanke erstmal für dein Feedback^^

    Grüßle Frank
     
  4. 16. März 2009
    AW: Passwort Generator

    ich meinte damit, dass du die stelle ankucken sollst und da eventuell selber mit der unixzeit arbeitest zusätzlich zu dem Math.random() aber gut so wie das aussieht ist das doch schon sehr sehr zufällig. kuck dir mal die sourcecodes von pwgen an

    PWGen - Browse Files at SourceForge.net

    da kannst sicher so einiges noch anpassen bei dir und die zufälligkeit weiter steigern
     
  5. 8. April 2009
    AW: Passwort Generator

    ist jetzt euch bei heise.de/software zu finden
    http://www.heise.de/software/download/passwort_generator/63813

    :klatsch: :klatsch: :klatsch: :klatsch:
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.