Vollständige Version anzeigen : [Java] Passwort Generator


frankred
15.03.2009, 12:35

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
;;0;xup~in/exec/ximg;php?fid=12746530
{img-src: ;passwort-generator;mynotiz~de/passwortGenerator_screenshot;gif}

Download
(;rapidshare~com/files/209074558/PasswortGenerator_Version_1;0;jar;html)

Quellcode
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 - ;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? :D

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Vlad_
16.03.2009, 14:58

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:


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 (;;;google~de/search?hl=de&q=java+unixtime)

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.


frankred
16.03.2009, 16:22

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....

Deswegen ist es oft nicht einfach starke Passwörter herzustellen. Ich würde dir allerdings raten, dass du bei deinem Programm, folgender Abschnitt:
Diese Aussage kann ich nicht ganz nachvollziehen 8o

Trotzdemdanke erstmal für dein Feedback^^

Grüßle Frank


Vlad_
16.03.2009, 21:43

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 (;sourceforge~net/project/showfiles;php?group_id=57385)

da kannst sicher so einiges noch anpassen bei dir und die zufälligkeit weiter steigern :)


frankred
08.04.2009, 15:59

ist jetzt euch bei heise~de/software zu finden :D
(;;;heise~de/software/download/passwort_generator/63813)

:klatsch: :klatsch: :klatsch: :klatsch:


Ähnliche Themen zu [Java] Passwort Generator
  • Passwort Generator der sicher ist
    Hallo ich suche einen Generator der auch was taugt welcher auch komplexe Passwörter generieren kann. bitte kein Online Passwort Generator, da man nie weiß ob die das speichern LG [...]

  • Suche Passwort Generator
    Hallo, ich suche einen Generator welcher mir Passwort Listen erstellt mit folgendem Beispiel : 4x7lUpSX 5c9lpaAn usw. [...]

  • Passwort Generator gesucht
    Kennt jemand einen guten Passwort Genereator. Wenns geht nicht online, weil man ja nicht weiß, ob sich diese Seiten dann nicht auch wieder das Passwort speichern und eventuell weitergeben. Ich such also eine Software, die sichere Passwörter erstellt! [...]

  • [C/C++] Passwort Generator v2.0
    Passwort Generator v2;0 ---------------------------- Sinn und Zweck: - schnell und unkompliziert Passwörter erstellen - Passwörter durch den eigenen Namen kennzeichnen - verschiedene Optionen für die Bestandteile des Passwortes Features: - frei wählbare Zeichen - Passwortlänge 5 bis [...]



raid-rush.ws | Imprint & Contact pr