~Java4Beginners~
~Java4Beginners~

JPasswordField

Immer wenn es um eine verdeckte Eingabe von einem Passwort geht, verwenden wir das Bedienelement JPasswordField.

notwendige Imports


import javax.swing.JPasswordField;

Konstruktoren

Neben dem Standardkonstruktor, welchen wir zu meist bei einem gesetzten Null-Layout verwenden, stehen uns 4 weitere Konstruktoren zur Verfügung.
Konstruktor Beschreibung
JPasswordField(Document doc, String txt, int columns) Hier wird ein JPasswordField erstellt, für welches der Dokumententyp, der Text und die Spaltenanzahl vorgegeben wird.
JPasswordField(int columns) Hier geben wir die Breite des Feldes in Spalten an.
JPasswordField(String text) Das JPasswordField wird erstellt und der text gleich dem JPasswordField übergeben.
JPasswordField(String text, int columns) Hier wird der Text und die Breite in Spalten dem JPasswordField übergeben.

Bemerkungen zum JPasswordField

Paste and Copy funktioniert beim JPasswordField nur bedingt. Es ist zwar zulässig, etwas ins Passwordfield einzufügen, allerdings kann aus dem JPasswordField nicht kopiert werden. Standardmässig wird als Zeichenmaskierung ein gefüllter Punkt verwendet. Mit ändern des EchoChard können wir allerdings dieses Zeichen ändern. Um das verschleierte Passwort in Klarschrift zu erhalten, müssen wir uns der Methode getPassword bedienen. Allerdings erhalten wir das Passwort nur Zeichenweise, so dass wir ein Array vom Datentyp char benötigen.

Beispielprogramm

In folgendem Beispielprogramm ist ein JPasswordField angelegt worden. Mit setEchoChar('*') wird als Maskierungszeichen der Stern verwendet.

Es erfolgen auch 2 Konsolenausgaben. Als erstes von dem Objekt pass und als zweites das ausgelesene Passwort, nachdem das char-Array die Schleife durchlaufen hat.

package GUIProgrammierung;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;

/**
 * Beispielprogramm für JPasswordField
 * @author Markus Badzura
 */
public class Bedien_JPasswordField extends JFrame
{
  public static void main(String[] args) {
    Bedien_JPasswordField jpf = new Bedien_JPasswordField();
    jpf.Bedien_JPasswordField();
  }
  public void Bedien_JPasswordField()
  {
    this.setSize(500,500);
    this.setTitle("Beispiel JTextField");   
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    JPanel pan = new JPanel();
    pan.setSize(this.getSize());
    JPasswordField pass = new JPasswordField("password");
    pass.setEchoChar('*');
    pass.setBounds(10,10,250,25);
    System.out.println(pass.toString());
    char[] passwort = pass.getPassword();
    for (int i = 0; i < passwort.length; i++)
    {
      System.out.print(passwort[i]);
    }
    pan.setLayout(null);
    pan.add(pass);
    this.add(pan);
    this.setVisible(true);
  }
}


MD5

Wie im obigen Beispiel ersichtlich, können wir zur Laufzeit das Passwort in Klarschrift auslesen. Wenn wir das Passwort speichern, sollten wir dafür sorgen, dass das Passwort nicht entschlüsselt werden kann. Hierfür können wir den Meassage-Digest Alogrithm 5 verwenden.

Diser Algorithmus ist eine weit verbreitete kryptografische Hashfunktion, die aus einer beliebigen Nachricht einen 128-Bit Hashwert erzeugt. Nachdem ich kein Mathematiker bin, erspare ich mir zu erklären, wie genau das Funktionierniert. Ich habe hier ein kleines Beispielprogramm erstellt, mit dem ein String in ein Byte-Array umgewandelt wird. Dieses wird anschließend zum HexString gewandelt. Als Ergebnis erhalten wir unser verschlüsseltes Passwort. Das eingegebene Passwort wird auf die gleiche Art und Weise verschlüsselt. Nun wird noch auf Gleichheit verglichen. Wenn bei diesem Vergleich mit compare als Ergebnis 0 entsteht, sind beide Passwörter identisch.

Beispielprogramm MD5


package ErsteSchritte;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;

/**
 * Beispiel einer MD5 Hasfunktion
 * @author Markus Badzura
 */
public class Hashwert_MD5 
{
  private static Scanner sc = new Scanner(System.in);

  public static void main(String[] args) {
    String text = "LuftBallon";
    System.out.println("Geben Sie Ihr Passwort ein");
    String eingabe = sc.next();
    if (getHash(eingabe).compareTo(getHash(text)) == 0)
    {
      System.out.println ("identisch");
    }
    else
    {
      System.out.println("nicht identisch");
    }
  }
  /**
   * Haswerte erstellen aus String
   * @param txt mit dem zu verschlüsselten Text
   * @return sb.toString() Hashwert
   */
  private static String getHash(String txt)
  {
    StringBuilder sb = new StringBuilder();
    try
    {
      MessageDigest md = MessageDigest.getInstance("MD5");
      byte[] array = md.digest(txt.getBytes());
      for (int i = 0; i< array.length; i++)
      {
        sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
      }
    }
    catch(NoSuchAlgorithmException e){}
    return sb.toString();
  }        
}
nach oben Java4Beginners -- Seitenversion 1.01 -- Stand: 2017-06-26